我計算每個循環的時間複雜度O(n)
。 從代碼的每一行的時間複雜度爲:從循環和條件語句計算時間複雜度
= 1 + n *((n * (1 + n * 1)) + (n * 1)))
= 1 + n * (n * (n + 1) + n)
= 1 + n * (n^2 + n + n)
= 1 + n^3 + n^2 + n^2
= 1 + n^3 + 2 * n^2`
所以它是O(n^3)
。
我的計算是否正確?
代碼:
int result = 0 ; //1
for (int i = 0 ; i <N ; i++){ //n
for (int j = 0 ; j <N ; j++){ //n
for (int k = 0 ; k <N ; k++){ //n
int x = 0 ; //1
while (x < n){ //n
result ++ ; //1
x+=3 ; //1
}
}
for(int k = 0 ; k<2*M ; K++){ //n
if(K%7 == 4)
result ++ ;
}
}
}
是的,真棒回答謝謝艾倫,但是當大o會記錄n和我的問題,如果for的第一行是這樣的(int i = 0; i> N; i ++){// N}和ñ說= 8我的意思是沒有達到循環的條件,所以大o將是O(1) – 2014-10-12 16:25:47
對不起@YallaraceMohamed我不太明白這一點。 O(log n)在哪裏進入? – Alan 2014-10-13 00:12:41
在這個例子中沒有否問什麼時候的複雜度會是n log n – 2014-10-13 04:11:26