Вывод Формулы N-Го Члена Рекуррентной Последовательности На Примере Задачи Из Квеста «Амнезия»

Пеленгский фермер Бухьерик разводит кабанов-хряков.

Эти животные размножаются настолько быстро, что их численность увеличивается в 3 раза каждый день.

Но, начиная со второго дня, на ферму стала нападать стая страшных животных — кабаньих шипов, каждый вечер пожиравшая в два раза больше кабаньих шипов, чем было в предыдущий день.

Сколько хряков будет у фермера 7-го вечера, если вначале их было 10?

Вывод формулы n-го члена рекуррентной последовательности на примере задачи из квеста «Амнезия»

Вы спросили хаалианца, что он думает об этой проблеме.

Немного подумав, он ответил: — Вначале было 10 кабанов.

В первый день они размножились, и к началу второго дня их стало уже 30. На второй день они снова размножились (их было 90 штук), но к вечеру пришли кабаньи-шлепки и съели в два раза больше кабаньих-шлепков, чем было вчера (в первый день), т. е.

20 штук.

Всего в начале третьих суток получаем 70 кабанов-шлепков.

Мне кажется, что, продолжая решать таким образом, мы сможем вычислить количество шипящих кабанов в любой данный день.

Это задание из игры "Космические рейнджеры 2", квест "Амнезия".

Попробуем вывести формулу количества плюющих кабанов на n-й день и, например, подсчитать количество плюющих кабанов на 32-й день.

Давайте посмотрим на первые несколько дней (день «0» я добавил только для удобства формулы, можно обойтись и без него)

День «0» 1 день День 2 День 3
Утро 0 10 30 70
После размножения 0 10 * 3 = 30 30 * 3 = 90 70 * 3 = 210
После дебилов (вечер) 0 10 * 3 — 0 * 2 = 30 30 * 3 — 10 * 2 = 70 70 * 3 — 30 * 2 = 150
Нас будет интересовать количество кабаньих шипений утром n-го дня, и, несмотря на то, что задача спрашивает о вечере, утреннее число будет правильным.

Таким образом, количество плюющих кабана (утром) представляет собой последовательность

Вывод формулы n-го члена рекуррентной последовательности на примере задачи из квеста «Амнезия»

Об этой последовательности мы знаем (из постановки задачи), что

Вывод формулы n-го члена рекуррентной последовательности на примере задачи из квеста «Амнезия»

И

Вывод формулы n-го члена рекуррентной последовательности на примере задачи из квеста «Амнезия»

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

количество кабанье-шлепанье утром равно равно их числу вечером предыдущего дня).

Те.

утром второго дня были

Вывод формулы n-го члена рекуррентной последовательности на примере задачи из квеста «Амнезия»

.

Утром третьего дня они уже были

Вывод формулы n-го члена рекуррентной последовательности на примере задачи из квеста «Амнезия»

.

День n-2 День n-1 День n
Утро

Вывод формулы n-го члена рекуррентной последовательности на примере задачи из квеста «Амнезия»



Вывод формулы n-го члена рекуррентной последовательности на примере задачи из квеста «Амнезия»



Вывод формулы n-го члена рекуррентной последовательности на примере задачи из квеста «Амнезия»

После размножения

Вывод формулы n-го члена рекуррентной последовательности на примере задачи из квеста «Амнезия»



Вывод формулы n-го члена рекуррентной последовательности на примере задачи из квеста «Амнезия»



Вывод формулы n-го члена рекуррентной последовательности на примере задачи из квеста «Амнезия»

После дебилов (вечер)

Вывод формулы n-го члена рекуррентной последовательности на примере задачи из квеста «Амнезия»



Вывод формулы n-го члена рекуррентной последовательности на примере задачи из квеста «Амнезия»



Вывод формулы n-го члена рекуррентной последовательности на примере задачи из квеста «Амнезия»

Начиная со второго дня

Вывод формулы n-го члена рекуррентной последовательности на примере задачи из квеста «Амнезия»

Применяется следующая рекуррентная формула:

Вывод формулы n-го члена рекуррентной последовательности на примере задачи из квеста «Амнезия»

Итак, снова все вместе

Вывод формулы n-го члена рекуррентной последовательности на примере задачи из квеста «Амнезия»

Мы получили формальное определение последовательности и этого уже достаточно, чтобы можно было вручную посчитать, сколько кабаньих шипений будет в какой день.

Более того, если бы у нас волшебным образом была какая-то формула для

Вывод формулы n-го члена рекуррентной последовательности на примере задачи из квеста «Амнезия»

, и эта формула справедлива для этих трёх условий, то эта формула и будет тем, что нам нужно.

Попробуем получить эту формулу.

Как правило, чтобы что-то найти, нужно составить уравнение, этим мы и займемся.

Наша последовательность

Вывод формулы n-го члена рекуррентной последовательности на примере задачи из квеста «Амнезия»

— это то, что мы хотим найти (точнее, мы хотим получить формулу для его членов).

Составим уравнение из последовательностей.

Для этого придумаем сложение для последовательностей:

Вывод формулы n-го члена рекуррентной последовательности на примере задачи из квеста «Амнезия»

Те.

сумма последовательностей также является последовательностью.

Важно отметить, что наши последовательности на самом деле бесконечны, и с ними нельзя просто что-то сделать.

Невозможно, например, просуммировать все члены последовательности без каких-либо оговорок — никто не может сидеть и складывать бесконечное количество времени.

Бесконечная последовательность — это то, где для любого числа членов мы можем сказать, как вычислить его за конечное время.

В случае последовательности

Вывод формулы n-го члена рекуррентной последовательности на примере задачи из квеста «Амнезия»

мы как бы говорим: возьми день 0, возьми день 1, а затем медленно, шаг за шагом, считай следующие дни, пока не достигнешь того, что тебе нужно.

О сумме последовательностей говорим: если вам нужен 100-й член суммы, то возьмите 100-й член из слагаемых последовательностей и сложите их.

Нужна миллионная - тоже, возьмите туда миллионную, возьмите туда миллионную, сложите эти цифры и получите то, что вам нужно.

Это похоже на суммирование полиномов, например:

Вывод формулы n-го члена рекуррентной последовательности на примере задачи из квеста «Амнезия»

.

Можно даже представить себе бесконечный многочлен

Вывод формулы n-го члена рекуррентной последовательности на примере задачи из квеста «Амнезия»

Где

Вывод формулы n-го члена рекуррентной последовательности на примере задачи из квеста «Амнезия»

- просто некоторые символы.

А если сложить два таких «бесконечных слагаемых», то их сумма будет в точности суммой последовательностей (именно так мы определили сумму последовательностей).

Здесь важно понимать, что бесконечных многочленов на самом деле не существует, это просто другое, но более удобное обозначение бесконечной последовательности: пишем

Вывод формулы n-го члена рекуррентной последовательности на примере задачи из квеста «Амнезия»

, но мы видим

Вывод формулы n-го члена рекуррентной последовательности на примере задачи из квеста «Амнезия»

.

Теперь придумаем умножение для последовательностей.

Просто умножить слагаемые парами так же, как и при сложении, не получится — оно хоть и будет похоже на умножение, но интересных свойств не даст. Да, и мне бы хотелось, чтобы умножение было похоже на умножение многочленов.

Например, так умножаются обычные конечные многочлены:

Вывод формулы n-го члена рекуррентной последовательности на примере задачи из квеста «Амнезия»

Они берутся и перемножаются: скобки раскрываются, и члены с одинаковой степенью х группируются.



Вывод формулы n-го члена рекуррентной последовательности на примере задачи из квеста «Амнезия»

Другими словами, каждый член первого многочлена умножается на каждый член второго.

Каждый со всеми.

Это нельзя так просто обобщить на бесконечные последовательности – опять же, потому что никто не может умножать бесконечное количество раз на бесконечное число элементов.

Здесь важно сказать правильно, а именно: пусть n-й член произведения последовательностей равен

Вывод формулы n-го члена рекуррентной последовательности на примере задачи из квеста «Амнезия»

Почему это так На самом деле, если вам интересно, что находится на 100-м месте, т. е.

какой коэффициент

Вывод формулы n-го члена рекуррентной последовательности на примере задачи из квеста «Амнезия»

, то вы вполне можете сказать:

Вывод формулы n-го члена рекуррентной последовательности на примере задачи из квеста «Амнезия»

может случиться, если умножить

Вывод формулы n-го члена рекуррентной последовательности на примере задачи из квеста «Амнезия»

.

Также

Вывод формулы n-го члена рекуррентной последовательности на примере задачи из квеста «Амнезия»

может случиться, если умножить

Вывод формулы n-го члена рекуррентной последовательности на примере задачи из квеста «Амнезия»

.

Можно сосчитать и назвать все 101 пару слагаемых, которые при умножении дадут

Вывод формулы n-го члена рекуррентной последовательности на примере задачи из квеста «Амнезия»

.

И после этого упомянуть, что больше нет

Вывод формулы n-го члена рекуррентной последовательности на примере задачи из квеста «Амнезия»

в работе он работать не может. Теперь мы знаем, как складывать бесконечные последовательности, а также умеем их умножать.

Вы можете заметить некоторые хорошие свойства, например, что

Вывод формулы n-го члена рекуррентной последовательности на примере задачи из квеста «Амнезия»

;

Вывод формулы n-го члена рекуррентной последовательности на примере задачи из квеста «Амнезия»

;

Вывод формулы n-го члена рекуррентной последовательности на примере задачи из квеста «Амнезия»

.

Это сложение и умножение мы придумали, необходимо проверить, выполняются ли такие свойства (это «группа» и «кольцо»).

Проверить это несложно, и, в общем-то, все эти свойства вполне естественны, особенно для тех, кто владеет хоть каким-то сложением и умножением конечных многочленов.

Давайте теперь попробуем посчитать на примере

Вывод формулы n-го члена рекуррентной последовательности на примере задачи из квеста «Амнезия»

.

По определению умножения получаем

Вывод формулы n-го члена рекуррентной последовательности на примере задачи из квеста «Амнезия»

Это выглядит логично — умножение последовательности на число приведет к умножению каждого члена на это число.

И это согласуется с

Вывод формулы n-го члена рекуррентной последовательности на примере задачи из квеста «Амнезия»

Важная заметка:

Вывод формулы n-го члена рекуррентной последовательности на примере задачи из квеста «Амнезия»

, где соответственно

Вывод формулы n-го члена рекуррентной последовательности на примере задачи из квеста «Амнезия»

Теперь давайте посчитаем

Вывод формулы n-го члена рекуррентной последовательности на примере задачи из квеста «Амнезия»

.

Кроме того, согласно определению умножения, мы получаем

Вывод формулы n-го члена рекуррентной последовательности на примере задачи из квеста «Амнезия»

Те.



Вывод формулы n-го члена рекуррентной последовательности на примере задачи из квеста «Амнезия»

Что, собственно, и совпадает с

Вывод формулы n-го члена рекуррентной последовательности на примере задачи из квеста «Амнезия»

Мы также получаем это

Вывод формулы n-го члена рекуррентной последовательности на примере задачи из квеста «Амнезия»

.

Это основные операции над нашей последовательностью, и теперь неплохо бы все это собрать и применить к исходной рекуррентной формуле

Вывод формулы n-го члена рекуррентной последовательности на примере задачи из квеста «Амнезия»

:

Вывод формулы n-го члена рекуррентной последовательности на примере задачи из квеста «Амнезия»

Из первой строки вычитаем вторую и прибавляем третью:

Вывод формулы n-го члена рекуррентной последовательности на примере задачи из квеста «Амнезия»

Итого получаем (используя хорошие свойства сложения и умножения):

Вывод формулы n-го члена рекуррентной последовательности на примере задачи из квеста «Амнезия»

это, напомню еще раз, на самом деле

Вывод формулы n-го члена рекуррентной последовательности на примере задачи из квеста «Амнезия»

Это уравнение, и мы его решим.

Мы не можем просто разделить на

Вывод формулы n-го члена рекуррентной последовательности на примере задачи из квеста «Амнезия»

, хотя бы потому, что мы не определили операцию деления.

Вместо этого мы умножим обе части уравнения на что-то, что, так сказать,

Вывод формулы n-го члена рекуррентной последовательности на примере задачи из квеста «Амнезия»

, и в конечном итоге слева останется одинокая буква F. На данный момент из того, что мы имеем, мы не можем достоверно сказать, существует ли такая вещь вообще.



Вывод формулы n-го члена рекуррентной последовательности на примере задачи из квеста «Амнезия»

(хотя оно существует, и мы сейчас это сделаем).

Почему можно на что-то умножить обе части уравнения? Если у нас есть какие-либо

Вывод формулы n-го члена рекуррентной последовательности на примере задачи из квеста «Амнезия»

И

Вывод формулы n-го члена рекуррентной последовательности на примере задачи из квеста «Амнезия»

, и притом такой, что

Вывод формулы n-го члена рекуррентной последовательности на примере задачи из квеста «Амнезия»

, Что

Вывод формулы n-го члена рекуррентной последовательности на примере задачи из квеста «Амнезия»

Но из этого совершенно не следует, что если

Вывод формулы n-го члена рекуррентной последовательности на примере задачи из квеста «Амнезия»

, Что

Вывод формулы n-го члена рекуррентной последовательности на примере задачи из квеста «Амнезия»

.

Например, из того, что

Вывод формулы n-го члена рекуррентной последовательности на примере задачи из квеста «Амнезия»

из этого вовсе не следует

Вывод формулы n-го члена рекуррентной последовательности на примере задачи из квеста «Амнезия»

.

Для того, чтобы это было правдой

Вывод формулы n-го члена рекуррентной последовательности на примере задачи из квеста «Амнезия»

такой элемент должен существовать

Вывод формулы n-го члена рекуррентной последовательности на примере задачи из квеста «Амнезия»

, Что

Вывод формулы n-го члена рекуррентной последовательности на примере задачи из квеста «Амнезия»

.

Тогда вы можете получить то, что

Вывод формулы n-го члена рекуррентной последовательности на примере задачи из квеста «Амнезия»

Немного преобразуем наше уравнение:

Вывод формулы n-го члена рекуррентной последовательности на примере задачи из квеста «Амнезия»

Это опять-таки не просто так, а потому, что последовательность

Вывод формулы n-го члена рекуррентной последовательности на примере задачи из квеста «Амнезия»

умножается на

Вывод формулы n-го члена рекуррентной последовательности на примере задачи из квеста «Амнезия»

и умноженный на

Вывод формулы n-го члена рекуррентной последовательности на примере задачи из квеста «Амнезия»

приводит к

Вывод формулы n-го члена рекуррентной последовательности на примере задачи из квеста «Амнезия»

Теперь немного проще, теперь было бы неплохо найти такой

Вывод формулы n-го члена рекуррентной последовательности на примере задачи из квеста «Амнезия»

И

Вывод формулы n-го члена рекуррентной последовательности на примере задачи из квеста «Амнезия»

, и умножим на них наше уравнение.

Существуют такие обратные последовательности, и вот их формула

Вывод формулы n-го члена рекуррентной последовательности на примере задачи из квеста «Амнезия»

Как я могу это получить? Сначала давайте рассмотрим простой случай, когда

Вывод формулы n-го члена рекуррентной последовательности на примере задачи из квеста «Амнезия»

:

Вывод формулы n-го члена рекуррентной последовательности на примере задачи из квеста «Амнезия»

Ясно, что

Вывод формулы n-го члена рекуррентной последовательности на примере задачи из квеста «Амнезия»

, тут без вариантов.

Теперь посмотрим, что может произойти с 1-й степенью х:

Вывод формулы n-го члена рекуррентной последовательности на примере задачи из квеста «Амнезия»

(Я просто умножаю первую последовательность на вторую покомпонентно).

Ясно, что

Вывод формулы n-го члена рекуррентной последовательности на примере задачи из квеста «Амнезия»

.

Далее мы получаем, что

Вывод формулы n-го члена рекуррентной последовательности на примере задачи из квеста «Амнезия»

.

Для общего случая

Вывод формулы n-го члена рекуррентной последовательности на примере задачи из квеста «Амнезия»

мы действуем аналогичным образом.

Таким образом, умножаем обе части уравнения:

Вывод формулы n-го члена рекуррентной последовательности на примере задачи из квеста «Амнезия»

Давайте посмотрим поближе

Вывод формулы n-го члена рекуррентной последовательности на примере задачи из квеста «Амнезия»

По определению произведения получаем формулу для n-го слагаемого:

Вывод формулы n-го члена рекуррентной последовательности на примере задачи из квеста «Амнезия»

Откуда взялся последний шаг? Это обычная сумма членов конечной геометрической прогрессии.

Быстро получить его можно так: Позволять

Вывод формулы n-го члена рекуррентной последовательности на примере задачи из квеста «Амнезия»

.

Затем

Вывод формулы n-го члена рекуррентной последовательности на примере задачи из квеста «Амнезия»

.

В то же время,

Вывод формулы n-го члена рекуррентной последовательности на примере задачи из квеста «Амнезия»

следовательно

Вывод формулы n-го члена рекуррентной последовательности на примере задачи из квеста «Амнезия»

Тотальное приравнивание

Вывод формулы n-го члена рекуррентной последовательности на примере задачи из квеста «Амнезия»

мы получаем

Вывод формулы n-го члена рекуррентной последовательности на примере задачи из квеста «Амнезия»

.

Заменяем полученный продукт

Вывод формулы n-го члена рекуррентной последовательности на примере задачи из квеста «Амнезия»

При умножении на

Вывод формулы n-го члена рекуррентной последовательности на примере задачи из квеста «Амнезия»

все члены умножаются на 10 и сдвигаются на 1 вправо.

Итого получаем результат

Вывод формулы n-го члена рекуррентной последовательности на примере задачи из квеста «Амнезия»

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

Например, на 32-й день мы получаем

Вывод формулы n-го члена рекуррентной последовательности на примере задачи из квеста «Амнезия»

.

Глядя на формулу, можно сказать, что хряки-хряки не помеха - даже будучи съеденными, они успевают размножаться в геометрической прогрессии.

Таким же способом можно вывести формулу для n-го члена последовательности Фибоначчи, только числа там будут пострашнее — с корнями, и в то же время для любого n формула будет давать натуральное число.

Некоторые мысли о сложности алгоритма Если реализовать алгоритм расчета кабаньих брызг по рекуррентному определению (рекурсию использовать не обязательно), то сложность получается O(n).

А вот если по формуле, то можно спорить, будет ли это O(n) или O(1).

Это зависит от того, как мы считаем 2**n — это O(1) или O(n).

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

Например, если вы заключите контракт на Ethereum, который будет считать эти кабаньи брызги, и посмотрите, что произойдет с потреблением газа в зависимости от алгоритма: Код прочности

   

pragma solidity ^0.4.0; contract Rangers { /* 10 -> 1335 gas 20 -> 2385 gas 30 -> 3435 gas 40 -> 4485 gas 50 -> 5535 gas 60 -> 6585 gas 70 -> 7635 gas 80 -> 8685 gas 90 -> 9735 gas 100 -> 10785 gas */ function byStepByStep(uint n) public pure returns (uint) { if (n == 0) { return 0; } if (n == 1) { return 10; } uint result = 10; uint prev1 = 10; uint prev2 = 0; for (uint i = 2; i <= n; i++) { result = 3*prev1 - 2*prev2; prev2 = prev1; prev1 = result; } return result; }

Теги: #космические рейнджеры #математика #математика
Вместе с данным постом часто просматривают: