這一篇主要是網上看到的一個複雜度題目,使用數學方法進行詳細分析計算
原文地址: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)
總結
找到執行次數最多語句的總次數,結果保留最高階即爲時間複雜度