我想了解Big-O時間複雜度,我不幸掙扎着,我似乎無法理解概念,但我知道我的結果對於以下兩個代碼片段是正確的我怎麼到那裏似乎是錯誤的。會有人能夠幫忙解釋一下,我是錯誤的理解(不請,但不使用西格瑪。謝謝!Big-O時間複雜度,嵌套for while while循環
Code Fragment Time Complexity
sum ← 0 O(1)
for i ← 1 to n do O(n)
for j ← 1 to n do O(n)
k←1 O(1)
while k < n do
k ← k * C O(log n) - affected by C (due to multiplication)
sum ← sum + 1 O(1)
-----------
O(1 x n x n x 1 x [log n] x 1)
O(n2 log n)
Code Fragment Time Complexity
sum ← 0 O(1)
for i ← 1 to n do O(n)
for j ← 1 to i do O(n)
k←1 O(1)
while k < n do
k ← k + C O(n) – not affected by C, k is arbitrarily large
sum ← sum + 1 O(1)
-----------
O(1 x n x n x 1 x n x 1)
O(n^3)
你難道不明白哪一步? – Eran 2014-09-29 20:12:49
另外,這與Java有什麼關係? – 2014-09-29 20:13:26
我認爲有一件事情你的時間複雜性是關閉的,那就是k * C的O(log n)。相反,由於循環變量的乘法運算,上面的循環運行了很多次。同樣在第二段代碼中。爲了比較,您還可以爲for循環指定一個複雜度! – 2014-09-29 20:17:50