成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)筆記-時間復(fù)雜度

張利勇 / 1984人閱讀

摘要:原文地址數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)筆記時間復(fù)雜度時間復(fù)雜度定義在進行算法分析時,語句總的執(zhí)行次數(shù)是關(guān)于問題規(guī)模的函數(shù),進而分析隨的變化情況并確定的數(shù)量級。同理,對于單純分支結(jié)構(gòu)不包含在循環(huán)中的或語句而言,執(zhí)行的次數(shù)都是恒定的,其時間復(fù)雜度也是。

原文地址:數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)筆記-時間復(fù)雜度

時間復(fù)雜度定義
在進行算法分析時,語句總的執(zhí)行次數(shù)T(n)是關(guān)于問題規(guī)模n的函數(shù),進而分析T(n)隨n的變化情況并確定T(n)的數(shù)量級。算法的時間復(fù)雜度,也就是算法的時間量度,記作:T(n) = O(f(n))。它表示隨問題規(guī)模n的增大,算法執(zhí)行時間的增長率和f(n)的增長率相同,稱作算法的漸近時間復(fù)雜度,簡稱為時間復(fù)雜度。其中f(n)是問題規(guī)模n的某個函數(shù)。

這樣用大寫O()來體現(xiàn)算法的時間復(fù)雜度的記法,我們稱之為大O記法。

推導(dǎo)大O階方法

如何分析一個算法的時間復(fù)雜度呢?即如何推導(dǎo)大O階呢?我們可以參考下面的推導(dǎo)方法。

推導(dǎo)大O階:
1. 用常數(shù)1取代運行時間中的所有加法常數(shù)。
2. 在修改后的運行次數(shù)函數(shù)中,只保留最高階項。
3. 如果最高階項存在且不是1,則去除與這個項相乘的常數(shù)。
得到的結(jié)果就是大O階。

下面讓我們根據(jù)這個推導(dǎo)方法來看幾個例子。

常數(shù)階
int sum = 0,n = 100;  /* 執(zhí)行一次 */
sum = (1 + n) * n/2;  /* 執(zhí)行一次 */
System.out.println(sum);  /* 執(zhí)行一次 */

這段程序的執(zhí)行次數(shù)是f(3)。我們使用大O階的方法推導(dǎo)一下:

將常數(shù)項3改為1。

保留最高階項。

沒有最高階項,所以這段程序的時間復(fù)雜度為O(1).

可以試想一下,如果這段代碼里的

sum = (1 + n) * n/2;  /* 執(zhí)行一次 */

一共有10句,那么時間復(fù)雜度是多少呢?

事實上,無論有多少句該代碼,都不過是3次和多次的執(zhí)行差異。像這種執(zhí)行時間恒定的算法,我們稱之為具有O(1)的時間復(fù)雜度,又叫常數(shù)階

注意:無論這個常數(shù)是多少,我們都記作O(1)。

同理,對于單純分支結(jié)構(gòu)(不包含在循環(huán)中的if或switch語句)而言,執(zhí)行的次數(shù)都是恒定的,其時間復(fù)雜度也是O(1)。

線性階

線性階的循環(huán)結(jié)構(gòu)會復(fù)雜一些。要確定某個算法的階次,我們常常需要確定某個特定語句或某個語句集的運行次數(shù)。因此,我們要分析算法的復(fù)雜度,關(guān)鍵就是要分析循環(huán)結(jié)構(gòu)的運行情況。

下面這段代碼,它的循環(huán)時間復(fù)雜度為O(n),因為循環(huán)中的代碼須要執(zhí)行n次。

for(int i = 0; i < n; i++){
}
對數(shù)階
int count = 1;
while(count < n){
    count = count * 2;
}

由于每次count乘以2之后,就離n更近了一些。也就是是,有多少個2相乘后大于n,則會退出循環(huán)。由2^x=n得到x=log2n(以2為底n的對數(shù))。所以這個循環(huán)的時間復(fù)雜度為O(logn)。

平方階

下面例子是一個循環(huán)嵌套,它的內(nèi)循環(huán)時間復(fù)雜度為O(n)。

int i,j;
for(i = 0; i < n; i++){
    for(j = 0; j < n; j++){
    
    }
}

對于外循環(huán)不過是這個時間復(fù)雜度為O(n)的語句循環(huán)了n次,所以這段代碼的時間復(fù)雜度為O(n^2)。

如果外循環(huán)的次數(shù)改為了m,那么時間復(fù)雜度就變?yōu)榱薕(m*n)。

所以我們可以總結(jié)出來:循環(huán)的時間復(fù)雜度等于循環(huán)體的復(fù)雜度乘以循環(huán)運行的次數(shù)。

那么,下面這段代碼的時間復(fù)雜度是多少呢?

int i,j;
for(i = 0; i < n; i++){
    for(j = i; j < n; j++){
    
    }
}

我們可以推導(dǎo)一下當(dāng)i = 0 時,內(nèi)循環(huán)執(zhí)行了n次;當(dāng)i = 1時,執(zhí)行了n - 1次,……當(dāng) i = n-1時,執(zhí)行了1次。所以總的執(zhí)行次數(shù)為:

n + (n-1) + (n-2) + …… + 1 = n(n+1)/2 = n^2/2 + n/2

用推導(dǎo)大O階的方法

由于沒有加法常數(shù),可以不考慮

只保留最高階,也就是保留n^2/2

去除常數(shù)的相乘項,也就是去除1/2

最終,這段代碼的時間復(fù)雜度就是O(n^2)。

常見的時間復(fù)雜度

該表列舉了一些常見的時間復(fù)雜度

執(zhí)行次數(shù)函數(shù) 非正式術(shù)語
12 O(1) 常數(shù)階
2n+3 O(n) 線性階
3n^2+2n+1 O(n^2) 平方階
5log2n(2為底n的對數(shù))+20 O(logn) 對數(shù)階
2n+3log2n(2為底n的對數(shù))+19 O(nlgon) nlogn階
6n^3+2n^2+3n+4 O(n^3) 立方階
2^n O(2^n) 指數(shù)階

常用的時間復(fù)雜度從小到大依次是:

O(1)

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/72207.html

相關(guān)文章

  • 算法學(xué)習(xí)筆記一、時空復(fù)雜度

    摘要:動態(tài)規(guī)劃背包士兵路徑復(fù)雜度談算法一定要考慮復(fù)雜度時間復(fù)雜度和空間復(fù)雜度時間復(fù)雜度計算機基本操作的次數(shù)匯編指令的條數(shù)尋址跳轉(zhuǎn)空間復(fù)雜度所需占用的內(nèi)存字節(jié)數(shù)兩者區(qū)別空間是可以返回利用的。 面試求職班一筆記 算法主要研究:時空復(fù)雜度 算法的特征: 有窮性, 確定性, 可行性, 可能沒有輸入,但一定有輸出 常用算法 窮舉法(eg:求N個數(shù)的全排列;8皇后問題) 減而治之(二分查找...

    wuyumin 評論0 收藏0
  • 學(xué)習(xí)筆記 | HTML 基本結(jié)構(gòu)和基本標(biāo)簽 ——前端學(xué)習(xí)第一步!

    摘要:基本結(jié)構(gòu)語言中,一個頁面是由四個部分組成文檔聲明標(biāo)簽對標(biāo)簽對標(biāo)簽對圖示文檔聲明這是一個文檔聲明,表示這是一個頁面。標(biāo)簽標(biāo)簽表示頁面內(nèi)容的范圍。 HTML HTML ...

    sPeng 評論0 收藏0
  • 「返現(xiàn)福利」極客時間返現(xiàn)二維碼匯總 + 學(xué)習(xí)筆記 + 知識腦圖

    摘要:偶然復(fù)雜度的概念來源于軟件行業(yè)里有一本名著叫人月神話,書中提到兩個非常重要的概念本質(zhì)復(fù)雜度和偶然復(fù)雜度。如何減少偶然復(fù)雜度引發(fā)的問題,讓軟件開發(fā)工作有序高效地進行,這正是作者希望通過程序員工作法這個專欄幫你解決的問題。 極客時間專欄微信返現(xiàn)二維碼匯總 有課學(xué)是一站式課程返現(xiàn)平臺,用戶通過掃描一下課程二維碼購買課程,提交購買截圖給有課學(xué)微信公眾號即可獲得返現(xiàn)。 showImg(https...

    snowell 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<