欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

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

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

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

本篇文章中通過一組圖片讓你輕松明白什么是時間復雜度,有趣生動,具有一定學習價值,感興趣的朋友快來了解一下吧。

數(shù)據結構之一組圖讓你搞懂時間復雜度的案例

數(shù)據結構之一組圖讓你搞懂時間復雜度的案例

數(shù)據結構之一組圖讓你搞懂時間復雜度的案例

數(shù)據結構之一組圖讓你搞懂時間復雜度的案例

數(shù)據結構之一組圖讓你搞懂時間復雜度的案例

數(shù)據結構之一組圖讓你搞懂時間復雜度的案例

數(shù)據結構之一組圖讓你搞懂時間復雜度的案例

時間復雜度的意義

究竟什么是時間復雜度呢?讓我們來想象一個場景:某一天,小灰和大黃同時加入了一個公司......

數(shù)據結構之一組圖讓你搞懂時間復雜度的案例

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

數(shù)據結構之一組圖讓你搞懂時間復雜度的案例

數(shù)據結構之一組圖讓你搞懂時間復雜度的案例

由此可見,衡量代碼的好壞,包括兩個非常重要的指標:

1.運行時間;

2.占用空間。

數(shù)據結構之一組圖讓你搞懂時間復雜度的案例

數(shù)據結構之一組圖讓你搞懂時間復雜度的案例

數(shù)據結構之一組圖讓你搞懂時間復雜度的案例

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

關于代碼的基本操作執(zhí)行次數(shù),我們用四個生活中的場景,來做一下比喻:

場景1:給小灰一條長10寸的面包,小灰每3天吃掉1寸,那么吃掉整個面包需要幾天?

數(shù)據結構之一組圖讓你搞懂時間復雜度的案例

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

如果面包的長度是 N 寸呢?

此時吃掉整個面包,需要 3 X n = 3n 天。

如果用一個函數(shù)來表達這個相對時間,可以記作 T(n) = 3n。

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

這個問題翻譯一下,就是數(shù)字16不斷地除以2,除幾次以后的結果等于1?這里要涉及到數(shù)學當中的對數(shù),以2位底,16的對數(shù),可以簡寫為log16。

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

如果面包的長度是 N 寸呢?

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

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

數(shù)據結構之一組圖讓你搞懂時間復雜度的案例

答案自然是2天。因為只說是吃掉雞腿,和10寸的面包沒有關系 。

如果面包的長度是 N 寸呢?

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

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

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

如果面包的長度是 N 寸呢?

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

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

數(shù)據結構之一組圖讓你搞懂時間復雜度的案例

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

場景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

場景2:T(n) = 5logn,執(zhí)行次數(shù)是對數(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("吃一半面包");
   }
}

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

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

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

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ù)據結構之一組圖讓你搞懂時間復雜度的案例

漸進時間復雜度

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

比如算法A的相對時間是T(n)= 100n,算法B的相對時間是T(n)= 5n^2,這兩個到底誰的運行時間更長一些?這就要看n的取值了。

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

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

記作 T(n)= O(f(n)),稱O(f(n)) 為算法的漸進時間復雜度,簡稱時間復雜度。

漸進時間復雜度用大寫O來表示,所以也被稱為大O表示法。

數(shù)據結構之一組圖讓你搞懂時間復雜度的案例

數(shù)據結構之一組圖讓你搞懂時間復雜度的案例

如何推導出時間復雜度呢?有如下幾個原則:

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

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

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

讓我們回頭看看剛才的四個場景。

場景1:

T(n) = 3n

最高階項為3n,省去系數(shù)3,轉化的時間復雜度為:

T(n) =  O(n)

數(shù)據結構之一組圖讓你搞懂時間復雜度的案例

場景2:

T(n) = 5logn

最高階項為5logn,省去系數(shù)5,轉化的時間復雜度為:

T(n) =  O(logn)

數(shù)據結構之一組圖讓你搞懂時間復雜度的案例

場景3:

T(n) = 2

只有常數(shù)量級,轉化的時間復雜度為:

T(n) =  O(1)

數(shù)據結構之一組圖讓你搞懂時間復雜度的案例

場景4:

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

最高階項為0.5n^2,省去系數(shù)0.5,轉化的時間復雜度為:

T(n) =  O(n^2)

數(shù)據結構之一組圖讓你搞懂時間復雜度的案例

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

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

在編程的世界中有著各種各樣的算法,除了上述的四個場景,還有許多不同形式的時間復雜度,比如:

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

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

數(shù)據結構之一組圖讓你搞懂時間復雜度的案例

數(shù)據結構之一組圖讓你搞懂時間復雜度的案例

時間復雜度的巨大差異

數(shù)據結構之一組圖讓你搞懂時間復雜度的案例

數(shù)據結構之一組圖讓你搞懂時間復雜度的案例

我們來舉過一個栗子:

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

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

算法A運行在小灰家里的老舊電腦上,算法B運行在某臺超級計算機上,運行速度是老舊電腦的100倍。

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

數(shù)據結構之一組圖讓你搞懂時間復雜度的案例

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

這就是不同時間復雜度帶來的差距。

數(shù)據結構之一組圖讓你搞懂時間復雜度的案例

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

網頁題目:數(shù)據結構之一組圖讓你搞懂時間復雜度的案例-創(chuàng)新互聯(lián)
URL鏈接:http://aaarwkj.com/article48/phoep.html

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

廣告

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

綿陽服務器托管
91伊人手机在线观看| 一区二区三区毛片在线看| 午夜视频在线观看黄片| 日韩精品第一区第二区| av亚洲天堂免费观看| 欧美日韩免费r在线视频| 国产精品成人av在线网站| 日韩精品亚洲一级在线观看| 亚洲成人日韩国产欧美| 婷婷人妻中文字幕在线| 91精品国产综合久久男男| 日韩精品a区二区在线电影| 亚洲欧美日韩性生活视频 | 人妻有码中文字幕在线| 中文字幕乱码亚州精品一区| 久久精品国产亚洲av麻豆尤物 | 婷婷激情六月中文字幕| 久久香蕉香蕉公开视频| 国产三级视频在线观看视频| 十八岁毛片一区二区三区| 青青草免费在线播放视频网站| 亚洲人妻乱人伦中文字幕在线| 高清大片免费看一区二区| 91麻豆精品在线观看| 青青草原天堂在线免费观看| 不卡一区二区福利日本| av免费在线观看大全| 少妇高潮叫床免费网站在线观看 | 亚洲精品一区二区三区三州| 日韩欧美亚洲综合另类| 精品在线免费视频观看| 日韩黄色大片免费在线观看| 欧美大片免费高清观看| 国产剧情av在线资源| 亚洲成人福利免费网站| 欧美丰满老妇性猛交| 91精品人妻一区二区三区| 免费在线观看做性小视频| 亚洲丰满毛茸茸毛茸茸| 91精品日日躁夜夜躁欧美| 亚洲中文字幕第11页|