2016-11-14 14 views
-2

申し訳時間複雑

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

は、このコードn^2またはnlognの複雑さですか? ありがとう

+3

[ネストされたループのBig-Oとは、内部ループ内の反復の数が外側ループの現在の反復によって決定されるものです](http://stackoverflow.com/questions/362059)/what-is-the-big-of-a-nested-loop-in-in-the-inner-loopの番号) – Liam

+2

あなた自身のコードの不正な作成をやめてください。私は今3回これをロールバックしなければならなかった – Liam

答えて

1

複雑さはO(n^2)です。

外側ループの最初の反復のために、内側ループは、外側ループの2回目の反復について0

を反復し、内部ループは1回反復します。

外側ループの3番目の反復では、内部ループは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

アップデートを確認する –