Что такое доказательство (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 = 5, то вы делаете 4 + 3 + 2 + 1 = 10 свопов -- и обратите внимание, что 10-это то же самое, что 4 * 5 / 2 - ...
Это довольно распространенное доказательство. Один из способов доказать это-использовать математическую индукцию. Вот ссылка: 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 = 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
.