この式は、バブル ソート アルゴリズムのデータ構造の本から取得しました。
(n-1) * (n 回) であることはわかっていますが、なぜ 2 で割るのか?
誰か私にこれを説明するか、詳細な証拠を教えてください。
ありがとうございました
(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
です。
まずは三角形から…
*
**
***
****
これまでのところ、1+2+3+4 を表しています。三角形を一次元に沿って半分に切る...
*
**
* **
** **
小さいパーツを180度回転させて、大きいパーツの上に貼り付けて……
**
*
*
**
**
**
ギャップを閉じて長方形を取得します。
一見すると、これは長方形の底辺の長さが偶数の場合にのみ機能しますが、長さが奇数の場合は、中央の列を半分にカットするだけで、幅が半分で高さが 2 倍 (まだ整数領域) 長方形の片側にストリップします。
三角形の底辺が何であれ、長方形の幅は(base / 2)
で、高さはであり(base + 1)
、 を与え((base + 1) * base) / 2
ます。
ただし、 mybase
は your です。n-1
バブル ソートは一度に 1 組の項目を比較するため、最初のループでは (n-1) の位置だけを反復します。
セットから数字のペアを作成してみてください。最初 + 最後; 2 番目 + 1 つ前の 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 と同じであることに注意してください。
等差数列の合計
(A1+AN)/2*N = (1 + (N-1))/2*(N-1) = N*(N-1)/2
これはかなり一般的な証明です。これを証明する 1 つの方法は、数学的帰納法を使用することです。ここにリンクがあります: http://zimmer.csufresno.edu/~larryc/proofs/proofs.mathinduction.html
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
。