web-dev-qa-db-ja.com

(N–1)+(N–2)+(N–3)+ ... + 1 = N *(N–1)/ 2の証明とは

この式は、バブルソートアルゴリズムのデータ構造の本から取得しました。

私たちは(n-1)*(n回)であることを知っていますが、なぜ2で割ったのですか?

誰でも私にこれを説明したり、詳細な証拠を教えてください。

ありがとうございました

22
skystar7

三角形の数字 を参照してください。

7
Viral Shah

三角形から始めます...

    *
   **
  ***
 ****

これまでの1 + 2 + 3 + 4を表します。 1つの次元に沿って三角形を半分にカットします...

     *
    **
  * **
 ** **

小さい部分を180度回転させ、大きい部分の上に貼り付けます...

    **
    * 

     *
    **
    **
    **

ギャップを閉じて、長方形を取得します。

一見すると、これは長方形のベースの長さが偶数の場合にのみ機能しますが、長さが奇数の場合、中央の列を半分にカットするだけです-ユニットの幅が半分の高さで2倍になります(まだ整数領域)長方形の片側のストリップ。

三角形の底辺が何であれ、長方形の幅は(base / 2)および高さは(base + 1)((base + 1) * base) / 2

ただし、私のbaseはあなたのn-1。バブルソートは一度に1組の項目を比較し、したがって最初のループの(n-1)位置のみを反復処理するためです。

20
Steve314

_(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になります。

16
sepp2k

セットから数字のペアを作成してみてください。最初+最後。 2番目+最後の1つ。これは、n-1 + 1を意味します。 n-2 +2。結果は常にnです。また、2つの数字を加算するため、(n-1)個の数字から作成できる(n-1)/ 2個のペアしかありません。

したがって、(N-1)/ 2 * Nのようになります。

8
gius

私たちは(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と同じです。

4
John Feminella

これはかなり一般的な証明です。これを証明する1つの方法は、数学的帰納法を使用することです。リンクは次のとおりです。 http://zimmer.csufresno.edu/~larryc/proofs/proofs.mathinduction.html

2
John Kane

算術的進行の合計

(A1 + AN)/ 2 * N =(1 +(N-1))/ 2 *(N-1)= N *(N-1)/ 2

1
ShPavel

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ごとに保持する必要があり、これで証明が終わります。

1
martiert

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に当てはまります。

1
IVlad