Что такое доказательство (N-1) + (N–2) + (N–3) + ... + 1= N*(N–1)/2 [закрыто]

Я получил эту формулу из структуры данных в алгоритме пузырьковой сортировки.

Я знаю, что мы (Н-1) * (n раз), но почему деление на 2?

может ли кто-нибудь объяснить это мне или дать подробное доказательство этого.

спасибо

9 ответов



начните с треугольника...

    *
   **
  ***
 ****

представление 1+2+3+4 пока что. Разрежьте треугольник пополам вдоль одного измерения...

     *
    **
  * **
 ** **

Поверните меньшую часть на 180 градусов и вставьте ее поверх большей части...

    **
    * 

     *
    **
    **
    **

закройте зазор, чтобы получить прямоугольник.

на первый взгляд это работает только в том случае, если основание прямоугольника имеет четную длину , но если оно имеет нечетную длину, вы просто разрезаете средний столбец пополам - он все еще работает с половина единицы шириной в два раза выше (все еще целочисленная область) полоса на одной стороне прямоугольника.

независимо от основания треугольника, ширина прямоугольника составляет (base / 2) и высотой (base + 1), предоставив ((base + 1) * base) / 2.

мой base ваш n-1, поскольку сортировка пузырьков сравнивает пару элементов за раз и, следовательно, выполняет итерацию только (n-1) позиций для первого цикла.

(N-1) + (N-2) +...+ 2 + 1 - сумма N-1 элементов. Теперь переупорядочить элементы так, что после первого приходит последний, затем второй, затем второй до последнего, т. е. (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.


попробуйте сделать пары чисел из множества. Первый + последний, второй + позапрошлого. Это означает n-1 + 1; n-2 + 2. Результат всегда n. И поскольку вы добавляете два числа вместе, есть только (n-1)/2 пары, которые могут быть сделаны из (n-1) чисел.

Так это похоже на (N-1) / 2 * N.


Я знаю, что мы (Н-1) * (n раз), но почему деление на 2?

только (n - 1) * n Если вы используете наивный bubblesort. Вы можете получить значительную экономию, если заметите следующее:

  • после каждого сравнения и замены самый большой элемент, с которым вы столкнулись, будет в последнем месте, где вы были.

  • после первого прохода наибольший элемент окажется на последнем месте; после kth проход, кth самый большой элемент будет в kth последнем месте.

(n - 1) + (n - 2) + .... Это арифметика серия, и уравнение для общего числа Времени (n-1)*n / 2.

пример: если размер списка N = 5, то вы делаете 4 + 3 + 2 + 1 = 10 свопов -- и обратите внимание, что 10-это то же самое, что 4 * 5 / 2 - ...


Это довольно распространенное доказательство. Один из способов доказать это-использовать математическую индукцию. Вот ссылка: 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 = kf (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.