欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

數(shù)據(jù)結(jié)構(gòu)之一組圖讓你搞懂時(shí)間復(fù)雜度的案例-創(chuàng)新互聯(lián)

這篇文章主要介紹數(shù)據(jù)結(jié)構(gòu)之一組圖讓你搞懂時(shí)間復(fù)雜度的案例,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

成都創(chuàng)新互聯(lián)主營(yíng)鎮(zhèn)寧網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,成都APP應(yīng)用開(kāi)發(fā),鎮(zhèn)寧h5成都微信小程序搭建,鎮(zhèn)寧網(wǎng)站營(yíng)銷推廣歡迎鎮(zhèn)寧等地區(qū)企業(yè)咨詢

本篇文章中通過(guò)一組圖片讓你輕松明白什么是時(shí)間復(fù)雜度,有趣生動(dòng),具有一定學(xué)習(xí)價(jià)值,感興趣的朋友快來(lái)了解一下吧。

數(shù)據(jù)結(jié)構(gòu)之一組圖讓你搞懂時(shí)間復(fù)雜度的案例

數(shù)據(jù)結(jié)構(gòu)之一組圖讓你搞懂時(shí)間復(fù)雜度的案例

數(shù)據(jù)結(jié)構(gòu)之一組圖讓你搞懂時(shí)間復(fù)雜度的案例

數(shù)據(jù)結(jié)構(gòu)之一組圖讓你搞懂時(shí)間復(fù)雜度的案例

數(shù)據(jù)結(jié)構(gòu)之一組圖讓你搞懂時(shí)間復(fù)雜度的案例

數(shù)據(jù)結(jié)構(gòu)之一組圖讓你搞懂時(shí)間復(fù)雜度的案例

數(shù)據(jù)結(jié)構(gòu)之一組圖讓你搞懂時(shí)間復(fù)雜度的案例

時(shí)間復(fù)雜度的意義

究竟什么是時(shí)間復(fù)雜度呢?讓我們來(lái)想象一個(gè)場(chǎng)景:某一天,小灰和大黃同時(shí)加入了一個(gè)公司......

數(shù)據(jù)結(jié)構(gòu)之一組圖讓你搞懂時(shí)間復(fù)雜度的案例

一天過(guò)后,小灰和大黃各自交付了代碼,兩端代碼實(shí)現(xiàn)的功能都差不多。大黃的代碼運(yùn)行一次要花100毫秒,內(nèi)存占用5MB。小灰的代碼運(yùn)行一次要花100秒,內(nèi)存占用500MB。于是......

數(shù)據(jù)結(jié)構(gòu)之一組圖讓你搞懂時(shí)間復(fù)雜度的案例

數(shù)據(jù)結(jié)構(gòu)之一組圖讓你搞懂時(shí)間復(fù)雜度的案例

由此可見(jiàn),衡量代碼的好壞,包括兩個(gè)非常重要的指標(biāo):

1.運(yùn)行時(shí)間;

2.占用空間。

數(shù)據(jù)結(jié)構(gòu)之一組圖讓你搞懂時(shí)間復(fù)雜度的案例

數(shù)據(jù)結(jié)構(gòu)之一組圖讓你搞懂時(shí)間復(fù)雜度的案例

數(shù)據(jù)結(jié)構(gòu)之一組圖讓你搞懂時(shí)間復(fù)雜度的案例

基本操作執(zhí)行次數(shù)

關(guān)于代碼的基本操作執(zhí)行次數(shù),我們用四個(gè)生活中的場(chǎng)景,來(lái)做一下比喻:

場(chǎng)景1:給小灰一條長(zhǎng)10寸的面包,小灰每3天吃掉1寸,那么吃掉整個(gè)面包需要幾天?

數(shù)據(jù)結(jié)構(gòu)之一組圖讓你搞懂時(shí)間復(fù)雜度的案例

答案自然是 3 X 10 = 30天。

如果面包的長(zhǎng)度是 N 寸呢?

此時(shí)吃掉整個(gè)面包,需要 3 X n = 3n 天。

如果用一個(gè)函數(shù)來(lái)表達(dá)這個(gè)相對(duì)時(shí)間,可以記作 T(n) = 3n。

場(chǎng)景2:給小灰一條長(zhǎng)16寸的面包,小灰每5天吃掉面包剩余長(zhǎng)度的一半,第一次吃掉8寸,第二次吃掉4寸,第三次吃掉2寸......那么小灰把面包吃得只剩下1寸,需要多少天呢?

這個(gè)問(wèn)題翻譯一下,就是數(shù)字16不斷地除以2,除幾次以后的結(jié)果等于1?這里要涉及到數(shù)學(xué)當(dāng)中的對(duì)數(shù),以2位底,16的對(duì)數(shù),可以簡(jiǎn)寫為log16。

因此,把面包吃得只剩下1寸,需要 5 X log16 = 5 X 4 = 20 天。

如果面包的長(zhǎng)度是 N 寸呢?

需要 5 X logn = 5logn天,記作 T(n) = 5logn。

場(chǎng)景3:給小灰一條長(zhǎng)10寸的面包和一個(gè)雞腿,小灰每2天吃掉一個(gè)雞腿。那么小灰吃掉整個(gè)雞腿需要多少天呢?

數(shù)據(jù)結(jié)構(gòu)之一組圖讓你搞懂時(shí)間復(fù)雜度的案例

答案自然是2天。因?yàn)橹徽f(shuō)是吃掉雞腿,和10寸的面包沒(méi)有關(guān)系 。

如果面包的長(zhǎng)度是 N 寸呢?

無(wú)論面包有多長(zhǎng),吃掉雞腿的時(shí)間仍然是2天,記作 T(n) = 2。

場(chǎng)景4:給小灰一條長(zhǎng)10寸的面包,小灰吃掉第一個(gè)一寸需要1天時(shí)間,吃掉第二個(gè)一寸需要2天時(shí)間,吃掉第三個(gè)一寸需要3天時(shí)間.....每多吃一寸,所花的時(shí)間也多一天。那么小灰吃掉整個(gè)面包需要多少天呢?

答案是從1累加到10的總和,也就是55天。

如果面包的長(zhǎng)度是 N 寸呢?

此時(shí)吃掉整個(gè)面包,需要 1+2+3+......+ n-1 + n = (1+n)*n/2 = 0.5n^2 + 0.5n。

記作 T(n) = 0.5n^2 + 0.5n。

數(shù)據(jù)結(jié)構(gòu)之一組圖讓你搞懂時(shí)間復(fù)雜度的案例

上面所講的是吃東西所花費(fèi)的相對(duì)時(shí)間,這一思想同樣適用于對(duì)程序基本操作執(zhí)行次數(shù)的統(tǒng)計(jì)。剛才的四個(gè)場(chǎng)景,分別對(duì)應(yīng)了程序中最常見(jiàn)的四種執(zhí)行方式:

場(chǎng)景1:T(n) = 3n,執(zhí)行次數(shù)是線性的。

void eat1(int n){
    for(int i=0; i<n; i++){;
        System.out.println("等待一天");
        System.out.println("等待一天");
        System.out.println("吃一寸面包");
    }
}
vo

場(chǎng)景2:T(n) = 5logn,執(zhí)行次數(shù)是對(duì)數(shù)的。

void eat2(int n){
   for(int i=1; i<n; i*=2){
       System.out.println("等待一天");
       System.out.println("等待一天");
       System.out.println("等待一天");
       System.out.println("等待一天");
       System.out.println("吃一半面包");
   }
}

場(chǎng)景3:T(n) = 2,執(zhí)行次數(shù)是常量的。

void eat3(int n){
   System.out.println("等待一天");
   System.out.println("吃一個(gè)雞腿");
}

場(chǎng)景4:T(n) = 0.5n^2 + 0.5n,執(zhí)行次數(shù)是一個(gè)多項(xiàng)式。

void eat4(int n){
   for(int i=0; i<n; i++){
       for(int j=0; j<i; j++){
           System.out.println("等待一天");
       }
       System.out.println("吃一寸面包");
   }
}

數(shù)據(jù)結(jié)構(gòu)之一組圖讓你搞懂時(shí)間復(fù)雜度的案例

漸進(jìn)時(shí)間復(fù)雜度

有了基本操作執(zhí)行次數(shù)的函數(shù) T(n),是否就可以分析和比較一段代碼的運(yùn)行時(shí)間了呢?還是有一定的困難。

比如算法A的相對(duì)時(shí)間是T(n)= 100n,算法B的相對(duì)時(shí)間是T(n)= 5n^2,這兩個(gè)到底誰(shuí)的運(yùn)行時(shí)間更長(zhǎng)一些?這就要看n的取值了。

所以,這時(shí)候有了漸進(jìn)時(shí)間復(fù)雜度(asymptotic time complectiy)的概念,官方的定義如下:

若存在函數(shù) f(n),使得當(dāng)n趨近于無(wú)窮大時(shí),T(n)/ f(n)的極限值為不等于零的常數(shù),則稱 f(n)是T(n)的同數(shù)量級(jí)函數(shù)。

記作 T(n)= O(f(n)),稱O(f(n)) 為算法的漸進(jìn)時(shí)間復(fù)雜度,簡(jiǎn)稱時(shí)間復(fù)雜度。

漸進(jìn)時(shí)間復(fù)雜度用大寫O來(lái)表示,所以也被稱為大O表示法。

數(shù)據(jù)結(jié)構(gòu)之一組圖讓你搞懂時(shí)間復(fù)雜度的案例

數(shù)據(jù)結(jié)構(gòu)之一組圖讓你搞懂時(shí)間復(fù)雜度的案例

如何推導(dǎo)出時(shí)間復(fù)雜度呢?有如下幾個(gè)原則:

  1. 如果運(yùn)行時(shí)間是常數(shù)量級(jí),用常數(shù)1表示;

  2. 只保留時(shí)間函數(shù)中的最高階項(xiàng);

  3. 如果最高階項(xiàng)存在,則省去最高階項(xiàng)前面的系數(shù)。

讓我們回頭看看剛才的四個(gè)場(chǎng)景。

場(chǎng)景1:

T(n) = 3n

最高階項(xiàng)為3n,省去系數(shù)3,轉(zhuǎn)化的時(shí)間復(fù)雜度為:

T(n) =  O(n)

數(shù)據(jù)結(jié)構(gòu)之一組圖讓你搞懂時(shí)間復(fù)雜度的案例

場(chǎng)景2:

T(n) = 5logn

最高階項(xiàng)為5logn,省去系數(shù)5,轉(zhuǎn)化的時(shí)間復(fù)雜度為:

T(n) =  O(logn)

數(shù)據(jù)結(jié)構(gòu)之一組圖讓你搞懂時(shí)間復(fù)雜度的案例

場(chǎng)景3:

T(n) = 2

只有常數(shù)量級(jí),轉(zhuǎn)化的時(shí)間復(fù)雜度為:

T(n) =  O(1)

數(shù)據(jù)結(jié)構(gòu)之一組圖讓你搞懂時(shí)間復(fù)雜度的案例

場(chǎng)景4:

T(n) = 0.5n^2 + 0.5n

最高階項(xiàng)為0.5n^2,省去系數(shù)0.5,轉(zhuǎn)化的時(shí)間復(fù)雜度為:

T(n) =  O(n^2)

數(shù)據(jù)結(jié)構(gòu)之一組圖讓你搞懂時(shí)間復(fù)雜度的案例

這四種時(shí)間復(fù)雜度究竟誰(shuí)用時(shí)更長(zhǎng),誰(shuí)節(jié)省時(shí)間呢?稍微思考一下就可以得出結(jié)論:

O(1)< O(logn)< O(n)< O(n^2)

在編程的世界中有著各種各樣的算法,除了上述的四個(gè)場(chǎng)景,還有許多不同形式的時(shí)間復(fù)雜度,比如:

O(nlogn), O(n^3), O(m*n),O(2^n),O(n!)

今后遨游在代碼的海洋里,我們會(huì)陸續(xù)遇到上述時(shí)間復(fù)雜度的算法。

數(shù)據(jù)結(jié)構(gòu)之一組圖讓你搞懂時(shí)間復(fù)雜度的案例

數(shù)據(jù)結(jié)構(gòu)之一組圖讓你搞懂時(shí)間復(fù)雜度的案例

時(shí)間復(fù)雜度的巨大差異

數(shù)據(jù)結(jié)構(gòu)之一組圖讓你搞懂時(shí)間復(fù)雜度的案例

數(shù)據(jù)結(jié)構(gòu)之一組圖讓你搞懂時(shí)間復(fù)雜度的案例

我們來(lái)舉過(guò)一個(gè)栗子:

算法A的相對(duì)時(shí)間規(guī)模是T(n)= 100n,時(shí)間復(fù)雜度是O(n)

算法B的相對(duì)時(shí)間規(guī)模是T(n)= 5n^2,時(shí)間復(fù)雜度是O(n^2)

算法A運(yùn)行在小灰家里的老舊電腦上,算法B運(yùn)行在某臺(tái)超級(jí)計(jì)算機(jī)上,運(yùn)行速度是老舊電腦的100倍。

那么,隨著輸入規(guī)模 n 的增長(zhǎng),兩種算法誰(shuí)運(yùn)行更快呢?

數(shù)據(jù)結(jié)構(gòu)之一組圖讓你搞懂時(shí)間復(fù)雜度的案例

從表格中可以看出,當(dāng)n的值很小的時(shí)候,算法A的運(yùn)行用時(shí)要遠(yuǎn)大于算法B;當(dāng)n的值達(dá)到1000左右,算法A和算法B的運(yùn)行時(shí)間已經(jīng)接近;當(dāng)n的值越來(lái)越大,達(dá)到十萬(wàn)、百萬(wàn)時(shí),算法A的優(yōu)勢(shì)開(kāi)始顯現(xiàn),算法B則越來(lái)越慢,差距越來(lái)越明顯。

這就是不同時(shí)間復(fù)雜度帶來(lái)的差距。

數(shù)據(jù)結(jié)構(gòu)之一組圖讓你搞懂時(shí)間復(fù)雜度的案例

以上是數(shù)據(jù)結(jié)構(gòu)之一組圖讓你搞懂時(shí)間復(fù)雜度的案例的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

網(wǎng)頁(yè)題目:數(shù)據(jù)結(jié)構(gòu)之一組圖讓你搞懂時(shí)間復(fù)雜度的案例-創(chuàng)新互聯(lián)
URL鏈接:http://chinadenli.net/article48/phoep.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)頁(yè)設(shè)計(jì)公司、網(wǎng)站設(shè)計(jì)網(wǎng)站排名、營(yíng)銷型網(wǎng)站建設(shè)手機(jī)網(wǎng)站建設(shè)、品牌網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

綿陽(yáng)服務(wù)器托管