この式は、バブルソートアルゴリズムのデータ構造の本から取得しました。
私たちは(n-1)*(n回)であることを知っていますが、なぜ2で割ったのですか?
誰でも私にこれを説明したり、詳細な証拠を教えてください。
ありがとうございました
三角形の数字 を参照してください。
三角形から始めます...
*
**
***
****
これまでの1 + 2 + 3 + 4を表します。 1つの次元に沿って三角形を半分にカットします...
*
**
* **
** **
小さい部分を180度回転させ、大きい部分の上に貼り付けます...
**
*
*
**
**
**
ギャップを閉じて、長方形を取得します。
一見すると、これは長方形のベースの長さが偶数の場合にのみ機能しますが、長さが奇数の場合、中央の列を半分にカットするだけです-ユニットの幅が半分の高さで2倍になります(まだ整数領域)長方形の片側のストリップ。
三角形の底辺が何であれ、長方形の幅は(base / 2)
および高さは(base + 1)
、((base + 1) * base) / 2
。
ただし、私のbase
はあなたのn-1
。バブルソートは一度に1組の項目を比較し、したがって最初のループの(n-1)位置のみを反復処理するためです。
_(N-1) + (N-2) +...+ 2 + 1
_はN-1個のアイテムの合計です。次に、最初のアイテムが最後に、次に2番目に、次に2番目から最後に、つまり_(N-1) + 1 + (N-2) + 2 +..
_になるように、アイテムを並べ替えます。アイテムの注文方法を見ると、これらのペアのそれぞれがNに等しいことがわかります(N-1 + 1はN、N-2 + 2はN)。 N-1個のアイテムがあるため、(N-1)/ 2個のそのようなペアがあります。したがって、N(N-1)/ 2回追加するため、合計値はN*(N-1)/2
になります。
セットから数字のペアを作成してみてください。最初+最後。 2番目+最後の1つ。これは、n-1 + 1を意味します。 n-2 +2。結果は常にnです。また、2つの数字を加算するため、(n-1)個の数字から作成できる(n-1)/ 2個のペアしかありません。
したがって、(N-1)/ 2 * Nのようになります。
私たちは(n-1)*(n回)であることを知っていますが、なぜ2で割ったのですか?
ただの (n - 1) * n
単純なバブルソートを使用する場合。次のことに気付くと、大幅に節約できます。
各比較と交換の後、遭遇した最大の要素は、あなたが最後にいた場所になります。
最初のパスの後、最大の要素は最後の位置になります。 kの後番目 パス、k番目 最大の要素はkにあります番目 最後の位置。
したがって、毎回すべてをソートする必要はありません。2回目はn-2個のエレメント、3回目はn-3個のエレメントなどをソートするだけです。つまり、比較/スワップの合計数は(n - 1) + (n - 2) + ...
。これは算術級数であり、合計回数の式は(n-1)* n/2 。
例:リストのサイズがN = 5の場合、4 + 3 + 2 + 1 = 10回のスワップを実行します-そして10 4 * 5/2と同じです。
これはかなり一般的な証明です。これを証明する1つの方法は、数学的帰納法を使用することです。リンクは次のとおりです。 http://zimmer.csufresno.edu/~larryc/proofs/proofs.mathinduction.html
算術的進行の合計
(A1 + AN)/ 2 * N =(1 +(N-1))/ 2 *(N-1)= N *(N-1)/ 2
N = 2と仮定します。次に、左側に2-1 = 1があり、右側に2 * 1/2 = 1があります。
f(n) =(n-1)+(n-2)+(n-3)+ ... + 1
ここで、n = kまでテストしたと仮定します。次に、n = k + 1をテストする必要があります。
左側にk +(k-1)+(k-2)+ ... + 1があるので、f(k)+ k
右側には、(k + 1)* k/2 =(k ^ 2 + k)/ 2 =(k ^ 2 + 2k-k)/ 2 = k +(k-1)k/2 = k f(k)
したがって、これはkごとに保持する必要があり、これで証明が終わります。
N
の項を考慮した帰納法による証明ですが、_N - 1
_でも同じです:
_N = 0
_の場合、式は明らかに真です。
1 + 2 + 3 + ... + N = N(N + 1) / 2
が一部の自然なN
に対して真であると仮定します。
以前の仮定を使用して、1 + 2 + 3 + ... + N + (N + 1) = (N + 1)(N + 2) / 2
も真であることを証明します。
1 + 2 + 3 + ... + N + (N + 1) = (N(N + 1) / 2) + (N + 1) = (N + 1)((N / 2) + 1) = (N + 1)(N + 2) / 2
。
したがって、式はすべてのN
に当てはまります。