時間複雜度

時間複雜度

一直對時間複雜度的概念不弄明白,今天就總結來作筆記學習吧學習

時間複雜度是總運算次數表達式中受n的變化影響最大的那一項(不含係數)spa

(1)   for(i=1;i<=n;i++)   //循環了n*n次,固然是O(n^2)
            for(j=1;j<=n;j++)
                 s++;
(2)   for(i=1;i<=n;i++)//循環了(n+n-1+n-2+...+1)≈(n^2)/2,由於時間複雜度是不考慮係數的,因此也是O(n^2)
            for(j=i;j<=n;j++)
                 s++;
(3)   for(i=1;i<=n;i++)//循環了(1+2+3+...+n)≈(n^2)/2,固然也是O(n^2)
            for(j=1;j<=i;j++)
                 s++;
(4)   i=1;k=0;
      while(i<=n-1){
           k+=10*i;
i++; }
//循環了
n-1≈n次,因此是O(n)
(5) for(i=1;i<=n;i++)
             for(j=1;j<=i;j++)
                 for(k=1;k<=j;k++)
                       x=x+1;
//
循環了(1^2+2^2+3^2+...+n^2)=n(n+1)(2n+1)/6(這個公式要記住哦)≈(n^3)/3,不考慮係數,天然是O(n^3)
另外,在時間複雜度中,log(2,n)(以2爲底)與lg(n)(以10爲底)是等價的,由於對數換底公式:
 
log(a,b)=log(c,b)/log(c,a)
因此,log(2,n)=log(2,10)*lg(n),忽略掉係數,兩者固然是等價的

常見的時間複雜度
按數量級遞增排列,常見的時間複雜度有:
常數階O(1),  對數階O(log2n),  線性階O(n),  線性對數階O(nlog2n),  平方階O(n^2), 立方階O(n^3),..., k次方階O(n^k), 指數階O(2^n) 。
其中,
1.O(n),O(n^2), 立方階O(n^3),..., k次方階O(n^k) 爲多項式階時間複雜度,分別稱爲一階時間複雜度,二階時間複雜度。。。。
2.O(2^n),指數階時間複雜度,該種不實用
3.對數階O(log2n),   線性對數階O(nlog2n),除了常數階之外,該種效率最高


例:

int count = 1;code

while (count < n)class

{    效率

count = count * 2; /* 時間複雜度爲O(1)的程序步驟序列 */循環

}程序

 

 

因爲每次count乘以2以後,就距離n更近了一分。總結

也就是說,有多少個2相乘後大於n,則會退出循環。時間

由2x=n獲得x=log2n。因此這個循環的時間複雜度爲O(logn)。while

相關文章
相關標籤/搜索