2016-11-26 5 views
-1
for i = 1 to n do 
    for j = 1 to i do 
     for k = 1 to j do 

時間の複雑さは「n」で何ですか?与えられたスニペットの時間の複雑さは何ですか?

+1

あなたはこの問題に対して何をしましたか?たとえば、 'j'の複雑さと正確な公式を述べることができますか?複雑さを明白にする 'k'の正確な公式については、[四面体数](https://en.wikipedia.org/wiki/Tetrahedral_number)を参照してください。 –

+0

n^3のように見えます。私は時間の複雑さにかなり悪いですが、私は間違っている可能性があります。また、これらのタグのほとんどは無関係です。 – byxor

+0

提案通りにタグを削除しました。 @BrandonIbbotson –

答えて

1

最も内側のループは明らかにj回実行されます。それは1時間単位の価値の操作が含まれていると仮定すると、これは以下のようになります。

T_inner(j) = j 

真ん中のループ、すなわちi回、

T_middle(i) = Sum {j from 1 to i} T_inner(j) 
      = Sum {j from 1 to i} j 
      = i/2 * (1 + i) 
最後に

実行されます:

T_outer(n) = Sum {i from 1 to n} T_middle(i) 
      = Sum {i from 1 to n} (i/2 * (1 + i)) 
      = 1/6 * n * (1 + n) * (2 + n) 
      = 1/6 n^3 + 1/2 n^2 + 1/3 n 

とし、これは明らかですO(n^3)

注:これは、最も内側のブロックの演算のみをカウントします。ループを実行するのに必要な操作は無視されます。しかし、それらを含めると、時間の複雑さは同じであることがわかります。

+0

ありがとう! @NicoSchertler、それは動作します:) –

+0

通常、アルゴリズムの複雑さが話題になると、彼らはループに必要な操作を考慮しますか、それとも常に無視されますか? –

+0

ループを維持するために必要な操作は、反復回数(初期化操作に加えて)に常に比例します。したがって、これは内側のブロックに一定量を加えることに似ています。結局のところ、これは複雑さを変えない。 –

関連する問題