一直對時間複雜度的概念不弄明白,今天就總結來作筆記學習吧學習
時間複雜度是總運算次數表達式中受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爲底)是等價的,由於對數換底公式:
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