詳解來源html
(1)、O(1)算法
Temp=i; i=j; j=temp;
以上三條單個語句的頻度均爲1,該程序段的執行時間是一個與問題規模n無關的常數。算法的時間複雜度爲常數階,記做T(n)=O(1)。注意:若是算法的執行時間不隨着問題規模n的增長而增加,即便算法中有上千條語句,其執行時間也不過是一個較大的常數。此類算法的時間複雜度是O(1)。
(2)、O(n2)code
2.1. 交換i和j的內容htm
sum=0; (一次) for(i=1;i<=n;i++) (n+1次) for(j=1;j<=n;j++) (n2次) sum++; (n2次)
解:由於Θ(2n2+n+1)=n2(Θ即:去低階項,去掉常數項,去掉高階項的常參獲得),因此T(n)= =O(n2);
2.2.blog
for (i=1;i<n;i++) { y=y+1; ① for (j=0;j<=(2*n);j++) x++; ② }
解:
語句1的頻度是n-1
語句2的頻度是(n-1)*(2n+1)=2n2-n-1
f(n)=2n2-n-1+(n-1)=2n2-2;
又Θ(2n2-2)=n2
該程序的時間複雜度T(n)=O(n2).get
通常狀況下,對步進循環語句只需考慮循環體中語句的執行次數,忽略該語句中步長加一、終值判別、控制轉移等成分,當有若干個循環語句時,算法的時間複雜度是由嵌套層數最多的循環語句中最內層語句的頻度f(n)決定的。循環
(3)、O(n)程序
a=0; b=1; ① for (i=1;i<=n;i++) ② { s=a+b; ③ b=a; ④ a=s; ⑤ }
解:
語句1的頻度:2,
語句2的頻度: n,
語句3的頻度: n-1,
語句4的頻度:n-1,
語句5的頻度:n-1,
T(n)=2+n+3(n-1)=4n-1=O(n).時間
(4)、O(log2n)co
i=1; ① hile (i<=n) i=i*2; ②
解:
語句1的頻度是1,
設語句2的頻度是f(n), 則:2^f(n)<=n;f(n)<=log2n
取最大值f(n)=log2n,
T(n)=O(log2n )
(5)、O(n3)
for(i=0;i<n;i++) { for(j=0;j<i;j++) { for(k=0;k<j;k++) x=x+2; } }
解:當i=m, j=k的時候,內層循環的次數爲k當i=m時, j 能夠取 0,1,...,m-1 , 因此這裏最內循環共進行了0+1+...+m-1=(m-1)m/2次因此,i從0取到n, 則循環共進行了: 0+(1-1)*1/2+...+(n-1)n/2=n(n+1)(n-1)/6因此時間複雜度爲O(n3).