最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java數(shù)據(jù)結(jié)構(gòu)--時(shí)間和空間復(fù)雜度

 更新時(shí)間:2021年08月31日 16:57:31   作者:吞吞吐吐大魔王  
這篇文章主要介紹了java數(shù)據(jù)結(jié)構(gòu)的時(shí)間和空間復(fù)雜度,小編覺得這篇文寫的不錯(cuò),感興趣的朋友可以了解下,希望能夠給你帶來幫助

一、算法效率

算法效率分析分為兩種:時(shí)間效率和空間效率

時(shí)間效率

時(shí)間效率被稱為時(shí)間復(fù)雜度,主要時(shí)衡量一個(gè)算法的運(yùn)行速度

空間效率

空間效率被稱為空間復(fù)雜度,主要衡量一個(gè)算法所需要的額外空間

二、時(shí)間復(fù)雜度 

1. 概念

一個(gè)算法所花費(fèi)的時(shí)間與其中語(yǔ)句的執(zhí)行次數(shù)成正比,故將算法中的基本操作的執(zhí)行次數(shù),作為算法的時(shí)間復(fù)雜度

并且時(shí)間復(fù)雜度其實(shí)還可以分成三種情況:

  • 最壞情況:任意輸入規(guī)模的最大運(yùn)行次數(shù)
  • 平均情況:任意輸入規(guī)模的期望運(yùn)行次數(shù)
  • 最好情況:任意輸入規(guī)模的最小運(yùn)行次數(shù)

而在實(shí)際中一般關(guān)注的是算法的最壞運(yùn)行情況

2. 大 O 的漸進(jìn)表示法

實(shí)際在我們計(jì)算時(shí)間復(fù)雜度時(shí),并不一定要計(jì)算精確的執(zhí)行次數(shù),而只需要大概執(zhí)行次數(shù),故我們使用大 O 的漸進(jìn)表示法(大 O 符號(hào)是用于描述函數(shù)漸進(jìn)行為的數(shù)學(xué)符號(hào))

使用方法

用常數(shù)1取代運(yùn)行時(shí)間中的所有加法常數(shù)在修改后的運(yùn)行次數(shù)函數(shù)中,只保留最高階項(xiàng)如果最高階項(xiàng)存在且不為1,則去除與這個(gè)項(xiàng)目相乘的常數(shù)

如某個(gè)算法的基本操作次數(shù)為 F(N) = N^2^ + 2*N + 10,用大 O 的漸進(jìn)表示法為:O(N)

3. 練習(xí)

在這里放入兩個(gè)遞歸函數(shù)的練習(xí),我們來試著推導(dǎo)其的時(shí)間復(fù)雜度

練習(xí)一:計(jì)算階乘遞歸 factorial 的時(shí)間復(fù)雜度

long factorial(int N) {
	return N < 2 ? N : factorial(N-1) * N;
}

這題很簡(jiǎn)單,結(jié)果為:O(N)

練習(xí)二:計(jì)算斐波那契遞歸 fibonacci 的時(shí)間復(fù)雜度

int fibonacci(int N) {
	return N < 2 ? N : fibonacci(N-1)+fibonacci(N-2);
}

這題可以結(jié)合畫圖類似于二叉樹去思考,結(jié)果為:O(N2)

注意

遞歸的時(shí)間復(fù)雜度 = 遞歸的次數(shù) * 每次遞歸內(nèi)容要執(zhí)行的次數(shù)

三、空間復(fù)雜度 

1. 概念

空間復(fù)雜度是對(duì)一個(gè)算法在運(yùn)行過程中臨時(shí)占用存儲(chǔ)空間大小的量度,它不是計(jì)算程序占用了多少 byte 的空間,而是計(jì)算變量的個(gè)數(shù)。(空間復(fù)雜度也使用大 O 的漸進(jìn)表示法)

2. 練習(xí)

練習(xí)一:計(jì)算 bubbleSort 的空間復(fù)雜度

void bubbleSort(int[] array) {
    for (int end = array.length; end > 0; end--) {
         boolean sorted = true;
         for (int i = 1; i < end; i++) {
             if (array[i - 1] > array[i]) {
                 Swap(array, i - 1, i);
                 sorted = false;
             }
         }
         if (sorted == true) {
             break;
         }
    }
}

因?yàn)橹皇褂昧顺?shù)個(gè)額外空間,故結(jié)果為:O(1)

練習(xí)二:計(jì)算 fibonacci 的空間復(fù)雜度

int[] fibonacci(int n) {
    long[] fibArray = new long[n + 1];
    fibArray[0] = 0;
    fibArray[1] = 1;
    for (int i = 2; i <= n ; i++) {
     	fibArray[i] = fibArray[i - 1] + fibArray [i - 2];
    }
    return fibArray;
}

因?yàn)閯?dòng)態(tài)開辟了 N 個(gè)空間,故結(jié)果為:O(N)

練習(xí)三:計(jì)算階乘遞歸 Factorial 的時(shí)間復(fù)雜度

long factorial(int N) {
	return N < 2 ? N : factorial(N-1)*N; 
}

因?yàn)檫f歸調(diào)用了 N 次,開辟了 N 個(gè)棧幀,每個(gè)棧幀使用了常數(shù)個(gè)空間,故結(jié)果為:O(N)

四、總結(jié)

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • Java創(chuàng)建線程的兩種方式

    Java創(chuàng)建線程的兩種方式

    這篇文章主要介紹了Java創(chuàng)建線程的兩種方式,針對(duì)Java創(chuàng)建線程的兩種方式進(jìn)行比較,感興趣的小伙伴們可以參考一下
    2016-10-10
  • 詳解Spring 中 Bean 的生命周期

    詳解Spring 中 Bean 的生命周期

    這篇文章主要介紹了Spring 中 Bean 的生命周期的相關(guān)資料,幫助大家更好的理解和使用spring框架,感興趣的朋友可以了解下。
    2021-01-01
  • SiteMesh如何結(jié)合Freemarker及velocity使用

    SiteMesh如何結(jié)合Freemarker及velocity使用

    這篇文章主要介紹了SiteMesh如何結(jié)合Freemarker及velocity使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • 淺談Spring中單例Bean是線程安全的嗎

    淺談Spring中單例Bean是線程安全的嗎

    這篇文章主要介紹了淺談Spring中單例Bean是線程安全的嗎?具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • Intellij IDEA集成JProfiler性能分析工具

    Intellij IDEA集成JProfiler性能分析工具

    作為Java程序員,性能分析是我們必須掌握的技能之一,在性能分析中,JProfiler是一款非常強(qiáng)大的工具,本文就來介紹一下Intellij IDEA集成JProfiler性能分析工具,就有一定的參考價(jià)值,感興趣的可以了解一下
    2023-12-12
  • 結(jié)合線程池實(shí)現(xiàn)apache?kafka消費(fèi)者組的誤區(qū)及解決方法

    結(jié)合線程池實(shí)現(xiàn)apache?kafka消費(fèi)者組的誤區(qū)及解決方法

    這篇文章主要介紹了結(jié)合線程池實(shí)現(xiàn)apache?kafka消費(fèi)者組的誤區(qū)及解決方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07
  • springboot CommandLineRunner接口實(shí)現(xiàn)自動(dòng)任務(wù)加載功能

    springboot CommandLineRunner接口實(shí)現(xiàn)自動(dòng)任務(wù)加載功能

    這篇文章主要介紹了springboot CommandLineRunner接口實(shí)現(xiàn)自動(dòng)任務(wù)加載功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-05-05
  • SpringBoot ApplicationListener事件監(jiān)聽接口使用問題探究

    SpringBoot ApplicationListener事件監(jiān)聽接口使用問題探究

    這篇文章主要介紹了SpringBoot ApplicationListener事件監(jiān)聽接口使用問題,自定義監(jiān)聽器需要實(shí)現(xiàn)ApplicationListener接口,實(shí)現(xiàn)對(duì)應(yīng)的方法來完成自己的業(yè)務(wù)邏輯。SpringBoot Application共支持6種事件監(jiān)聽
    2023-04-04
  • Java 把json對(duì)象轉(zhuǎn)成map鍵值對(duì)的方法

    Java 把json對(duì)象轉(zhuǎn)成map鍵值對(duì)的方法

    這篇文章主要介紹了java 把json對(duì)象中轉(zhuǎn)成map鍵值對(duì)的方法,本文的目的是把json串轉(zhuǎn)成map鍵值對(duì)存儲(chǔ),而且只存儲(chǔ)葉節(jié)點(diǎn)的數(shù)據(jù) 。需要的朋友可以參考下
    2018-04-04
  • SpringMVC結(jié)合模板模式實(shí)現(xiàn)MyBatisPlus傳遞嵌套JSON數(shù)據(jù)

    SpringMVC結(jié)合模板模式實(shí)現(xiàn)MyBatisPlus傳遞嵌套JSON數(shù)據(jù)

    我們經(jīng)常會(huì)遇到需要傳遞對(duì)象的場(chǎng)景,有時(shí)候,我們需要將一個(gè)對(duì)象的數(shù)據(jù)傳遞給另一個(gè)對(duì)象進(jìn)行處理,但是又不希望直接暴露對(duì)象的內(nèi)部結(jié)構(gòu)和實(shí)現(xiàn)細(xì)節(jié),所以本文給大家介紹了SpringMVC結(jié)合模板模式實(shí)現(xiàn)MyBatisPlus傳遞嵌套JSON數(shù)據(jù),需要的朋友可以參考下
    2024-03-03

最新評(píng)論

美姑县| 沙坪坝区| 东乡县| 库尔勒市| 新密市| 宣化县| 淮南市| 肥东县| 柳江县| 西充县| 重庆市| 庆元县| 台中县| 长武县| 绿春县| 万年县| 法库县| 东丽区| 博爱县| 读书| 仁怀市| 姚安县| 卫辉市| 浙江省| 西丰县| 阳城县| 昭平县| 青阳县| 于田县| 垣曲县| 孝感市| 永靖县| 德安县| 会宁县| 北海市| 历史| 盈江县| 秦皇岛市| 扶沟县| 乌鲁木齐县| 莱阳市|