Каково доказательство (N–1) + (N–2) + (N–3) + + 1= N*(N–1)/2

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

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

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

Спасибо


person skystar7    schedule 20.03.2010    source источник
comment
mathoverflow.net   -  person Pascal Thivent    schedule 20.03.2010
comment
... предназначен только для математических вопросов исследовательского уровня.   -  person rjh    schedule 20.03.2010
comment
@PascalThivent: этот вопрос будет закрыт в течение нескольких секунд при mathoverflow.   -  person sepp2k    schedule 20.03.2010
comment
@Стефан, это формула, если N добавляется слева. Если это не так, то одна N отсутствует, поэтому 2N следует вычесть из числителя.   -  person Johannes Schaub - litb    schedule 20.03.2010
comment
Не по теме? - разве алгоритмический анализ не имеет ничего общего с программированием? Как говорит Skystar, контекст — это анализ алгоритма.   -  person Steve314    schedule 20.03.2010
comment
Потому что одним из быстрых способов сложения чисел является перечисление чисел по возрастанию, а затем по убыванию. Вы понимаете, что все время складываете N+1 (первая пара 1,n, 2-я пара 2,n-1...) n раз. Следовательно, n*(n+1). На самом деле вы суммировали все числа дважды, так что вы делите их пополам, чтобы получить ответ.   -  person    schedule 20.03.2010
comment
@rjh @sepp2k Тогда извини, забудь, что я сказал.   -  person Pascal Thivent    schedule 20.03.2010
comment
Это слишком просто для mathoverflow.net; здесь, в Великобритании, это считается математикой уровня A /, возможно, GCSE.   -  person    schedule 20.03.2010
comment
Stephan202: Только если серия начинается с n.   -  person Ken    schedule 20.03.2010
comment
Ничего себе, у меня есть серьезные возражения против того, чтобы это было закрыто.   -  person Steven Oxley    schedule 20.03.2010
comment
@litb, @Ken: Ты прав. Я не заметил, что сам N не включен (обычно это так, с этой постановкой задачи). Дох!   -  person Stephan202    schedule 20.03.2010
comment
Это, по сути, математический вопрос. В основном алгебраическое тождество. Это не убивает его как тему SO, но мой личный критерий для математических вопросов, относящихся к SO, таков: будет ли математика выполняться программой или, будет ли математика переведена в код? В этом случае ответ Нет, поэтому я бы также проголосовал за закрытие как не по теме. YMMV.   -  person dmckee --- ex-moderator kitten    schedule 21.03.2010
comment
ты я?!?! Я просто искал это, вы сформулировали именно то, о чем я думал :D   -  person yuudachi    schedule 25.05.2010
comment
math.stackexchange.com   -  person phuclv    schedule 06.05.2017


Ответы (9)


См. треугольные числа.

person Viral Shah    schedule 20.03.2010
comment
Спасибо, мне понравились эти методы в объяснении доказательства этой формулы, особенно метод номер три, который можно найти по адресу betterexplained.com/articles/ - person skystar7; 21.03.2010

(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.

person sepp2k    schedule 20.03.2010

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

    *
   **
  ***
 ****

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

     *
    **
  * **
 ** **

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

    **
    * 

     *
    **
    **
    **

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

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

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

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

person Steve314    schedule 20.03.2010

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

Так что это как (N-1)/2 * N.

person gius    schedule 20.03.2010

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

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

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

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

Таким образом, вам не нужно сортировать все это каждый раз: вам нужно отсортировать только n - 2 элемента во второй раз, n - 3 элемента в третий раз и так далее. Это означает, что общее количество сравнений/замен, которые вам нужно сделать, составляет (n - 1) + (n - 2) + .... Это арифметический ряд и уравнение для общего числа раз равно (n - 1)*n / 2.

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

person John Feminella    schedule 20.03.2010
comment
Но также написано, что n(n - 1)/2 или O(n^2) или n^2. Итак, квадрат n, то есть квадрат 5, равен 25. Но n(n-1)/2 равно 10. Так как же это возможно? - person Harinder; 15.03.2015
comment
@Harinder: или O (n ^ 2), или n ^ 2 .... Нет, O (n ^ 2) == n ^ 2 неверно. n^2 + 1,000,000 тоже O(n^2), но явно не равно n^2. - person John Feminella; 15.03.2015
comment
А также правильно ли это n (n - 1)/2 или O (n ^ 2) ?? Если да, то как он стал O (n ^ 2) - person Harinder; 15.03.2015
comment
@Harinder: Вы должны задать отдельный вопрос SO. Комментарии не очень хороши для подробного ответа. - person John Feminella; 15.03.2015

Сумма арифметической прогрессии

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

person ShPavel    schedule 20.03.2010

Это довольно распространенное доказательство. Один из способов доказать это — использовать математическую индукцию. Вот ссылка: http://zimmer.csufresno.edu/~larryc/proofs/proofs.mathinduction.html

person John Kane    schedule 20.03.2010

Предположим, что 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, и на этом доказательство завершается.

person martiert    schedule 20.03.2010

Вот доказательство по индукции с учетом 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.

person IVlad    schedule 20.03.2010
comment
Предположим, что P(N) истинно для всех натуральных N. Это неверное доказательство по индукции. Вы стремитесь доказать P(N) => P(N+1), поэтому вы должны предположить, что P(N) верно для некоторых N. Если вы предполагаете это для всех< /i> Н, тогда у тебя напрашивается вопрос. - person Steve Jessop; 20.03.2010