4

わかりましたので、私はアルゴリズムを分析するのは初めてです。これを行う方法について共有できる役立つヒントがあれば、本当に感謝しています。n の関数として count がインクリメントされる回数を特定しようとしています。IDEで実行しましたが、値1〜7の場合、出力は1,3,6,10,15,21,28です。これをnの関数として書く方法がわかりませんか?ありがとう。ループは次のとおりです。

for(int i = 1 ; i <= n ; i++){

    for (int j = 1 ; j <= i ; j++) {

         count++;
    }
}
4

3 に答える 3

4

この種の演習の目的は、機械で実行するのではなく、紙の上で分析する方法を教えることです。しかし、次のパターンを見てみましょう。

  • 外側のループは合計n回実行されます
  • n内側のループは、その時の状況に応じて1 ~ 回実行されiます。しかし、平均して、これは実行(n+1)/2時間になることを知っています。
  • したがってcount = n(n+1)/2)、これはO(n^2)

算術級数を見る

更新:要求どおり - 内側のループの理由(n+1)/2:

外側のループは、i を 1 から n の間でインクリメントします。そのため、外側のループの各反復で、内側のループは以前よりも 1 回多く「ループ」します。

したがって、内側のループはこの回数だけ繰り返されます。

  • 1 + 2 + 3 + ... + n

だから私たちは巧妙なことをしてペアを組むことができます:

  • n と 1: (n + 1) = n + 1
  • n-1 と 2: (n - 1) + 2 = n + 1
  • n-2 と 3: (n - 2) + 3 = n + 1
  • ...

そして、これらをペアにしたので、n/2 個のペアがあります。

  • したがって、1 + 2 + ... + n の合計は ( (n+1) * (n/2) ) です。
  • したがって、平均は ( (n+1) * (n/2) ) / n = (n+1)/2

(長い紙に 1 + 2 + 3 + ... + n を書き、半分に折ります。)

また、カール・フリードリッヒ・ガウスに関するこの有名な話を読むことを強くお勧めします。これにより、算術級数の合計方法を常に覚えておくことができます =)

于 2012-11-20T22:51:50.310 に答える
1

1

1+2 = 3

1+2+3 = 6

1+2+3+4 = 10

1+2+3+4+5 = 15

模様が見えるのは私だけ?:-)

于 2012-11-20T22:48:03.023 に答える
1

どうぞ:

カウント = n * (n + 1) / 2

于 2012-11-20T22:52:46.717 に答える