Lolka555's blog

By Lolka555, 2 years ago, In Russian

Задача: Найти сумму всех комбинаций перемножения натурального ряда от 1 до N

На данную задачу есть решение на GeeksForGeeks работающее за O(n^2).

В данном посте я представлю решение в виде формулы выведенной методом индукции.

Решение

ВАЖНО: Заметим что ответ на задачу не меняется, если начинаем мы с 0. Поскольку все комбинации включающие 0, просто на сумме не отразятся.

База индукции

Здесь я просто рассматриваю случаи на маленьких n и пытаюсь найти закономерность.

Доказательство для N

  • n! - 1 Это сумма произведений входящих до n — 1. (зеленная рамка)
  • n * (n!-1) Формула, которая образуется если во все предыдущие комбинации добавить наше n. В таком случае мы получим новые комбинации, которые не встречались ранее. (красная рамка)
  • n Это оставшееся единичное подмножество из самого n. (синяя рамка)

В итоге просуммировав эти комбинации мы получим: (n!-1) + n * (n!-1) + n

Сократим вышеприведенную запись. Конечная формула: (n + 1)! - 1

Очевидно что итоговый ответ в виде кода будет работать за O(n). Понятно, что при больших N наш факториал будет замедляться. Но это точно лучше, чем обходить комбинации за квадрат.

  • Vote: I like it
  • 0
  • Vote: I do not like it