2016-11-14 118 views
-2

很抱歉,如果這個問題是一個重複的,或者是一種愚蠢的,但我真正的新算法開發) 你能解釋我什麼是下面這段代碼的複雜性時間代碼的複雜性

for (int i=0; i<n; i++) { 
    for (int j=0; j<i; j++) { 
     do stuff... 
    } 
} 

是這個代碼的複雜性n^2nlogn? 謝謝

+3

可能的重複[什麼是嵌套循環的Big-O,其中內循環中的迭代次數由外循環的當前迭代決定?](http://stackoverflow.com/questions/362059/what-is-big-o-an-nested-loop-where-in-the-inner-loop) – Liam

+2

請停止惡意破壞你自己的代碼。我必須現在回滾3次 – Liam

回答

1

複雜性是O(n^2)

對於外部循環的第一次迭代中,內環將迭代0

對於外部循環的第二次迭代中,內環將迭代1倍。

對於外循環的第三次迭代,內循環將迭代2次。

.........

對於外環的n次迭代,內環將迭代n - 1倍。

迭代總數= 0 + 1 + 2 + 3 + 4 ...... + (n - 1)

我們知道,等差數列

1 + 2 + 3 + ..... + (n - 2) + (n - 1) + n = (n * (n + 1))/2 

所以,

0 + 1 + 2 + 3 + 4 ...... + (n - 1) 
= (n * (n - 1))/2 
~ n^2 

考慮do stuff階段將在固定時間內執行的總和,整體時間複雜度爲O(n^2)

+0

爲什麼你除以2? – Adjit

+0

檢查更新 –