複雜度分析之很多重循環

這一篇主要是網上看到的一個複雜度題目,使用數學方法進行詳細分析計算

原文地址:http://blog.csdn.net/huxiaokang1234/article/details/52929515

參考鏈接:https://zhidao.baidu.com/question/74096252.html


例1

for(i=1;i<=n;i++)
	for(j=1;j<=i;j++)
		for(k=0;k<=j;k++)
			x++;
時間複雜度分析如下


我們對它進行仔細分析,它的來源應該是:



例2

i = 1;
while(i < n) 
	i = i * 2;

它的時間複雜度分析應該是這樣的:假設執行了k次之後,纔會停止,那麼就有i=n,此時i=2*2*2*2..........*1=2^k,因爲這是一個遞歸,所以有2^k=n,兩邊取對數,那麼就有k=log n(底數爲2),此時就是T(n)=O((log2)n),其中(log2)n表示以2爲底的對數


個人分析

上述例1程序中執行次數最多語句爲x++,首先分析執行次數,由於一下看不出來,因此採用常數推測看規律,當i=1執行1*2次,當i=2執行2*3次,當i=3執行3*4,....,當i=n時執行n*(n+1)次,所以執行總次數爲1*2+2*3+3*4+...n*(n+1)=1(1+1)+2(2+1)+3(3+1)+···+n(n+1)=1²+1+2²+2+3²+3+····+n²+n=(1+2+3+····+n)+(1²+2²+3²+···n²)=(1+n)n/2+n(n+1)(2n+1)/6=n(n+1)/2[1+(2n+1)/3]=n(n+1)(n+2)/3=x1*n^3+x2*n^2+x3*n^1+x4*1,其中x1、x2、x3、x4均表示常數,由於求時間複雜度時不關心這些,只關心最高階,因此時間複雜度爲O(n^3)


總結

找到執行次數最多語句的總次數,結果保留最高階即爲時間複雜度

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章