トリプルネストループの時間の複雑さ


13

次のトリプルネストループを検討してください。

for (int i = 1; i <= n; ++i)
    for (int j = i; j <= n; ++j)
        for (int k = j; k <= n; ++k)
            // statement

ここでのステ​​ートメントは、正確にn n + 1 n + 2 実行されます回。誰かがこの式がどのように得られたか説明してもらえますか?ありがとうございました。n(n+1)(n+2)6


1
ネストされたループの時間の複雑さの式の質問も興味深いかもしれません。
-Juho

回答:


14

最も内側のforループが実行される回数をカウントするには、そのループが実行されるトリプレットの数をカウントします。jk

:私たちが知っていることをループ条件によって。次の単純な組み合わせの問題にそれを減らすことができます。1jkn

  • 左から右に個の赤いボックスが配列に配置されていると想像してください。n+2
  • 個のボックスから3個のボックスを選択し、それらを青でペイントします。n+2
  • 次のように、トリプレットを形成します。 jk
    • = 1 +最初の青いボックスの左側にある赤色のボックスの数。
    • = 1 + 2番目の青いボックスの左側にある赤色のボックスの数。j
    • = 1 + 3番目の青いボックスの左側にある赤色のボックスの数。k

したがって、個のボックスから3個のボックスを選択する方法の数を数えるだけです。n+2n+23


2
いい答え!i、j、kの正確な値は重要ではありません。青色のボックスはn個の可能な位置に配置でき、それらの位置は制限されていることを知る必要があります。2番目は常に1番目の後、3番目の前に来ます。
ダヴィッドナティンガ

@rizwanhudda n + 2の部分を除いてクリアします。説明してください。n + 3は正しい数字のように見えます。+2n+2n+3
-saadtaame

1
@saadtaameはい。あなたは持っ想像できる赤い箱が、「うちの青の塗装のために3つの赤いボックスを選択する自由持つN + 2つのあなたは(ので青いとして最初のボックスを色付けすることができないとして、赤いボックスを」I 1n+3n+21
rizwanhudda

3

n

n+n1+n2++1

j=0nnjn

=0nj=0nnj=nn+1n+26

あなたにとっての課題:ネストされたループがあると想像してください。前の回答によれば、x回選択して(n + x-1)を実行します。数式をどのように計算しますか?
ダヴィッド・ナティンガ

幸いなことに、OPはx-nestedを要求しませんでした!与えられた他の答えは、どのようにxネストされたループに展開されますか?私の答えは、0からn、0からn-i_1、0からn-i_2、...、0からn-i_xまでの合計を取得するだけです。しかし、私はそれを計算する方法を知りません。
アンディmcevoy

1
答えは一般的なxに対して明示的に展開されませんが、提示された推論プロセスはxネストされたループに従うのは簡単です。青いボックスを追加するだけです。また、それらの合計をどのように計算するかもわかりません。
ダヴィッド・ナティンガ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.