Вывод производящей функции
Как превратить правило построения объектов в формулу для их числа? Если размеры складываются, подсчёт составных объектов приводит к свёртке последовательностей. Производящая функция выбрана именно так, чтобы эта свёртка стала обычным умножением. Благодаря этому рекурсии превращаются в алгебраические уравнения, из решений которых снова можно извлечь исходные коэффициенты.
Слои градуированного множества
Пусть
На примере перестановок градуировку можно увидеть как отображение от объектов к их степеням. Перестановки одного размера переходят в одно и то же число и тем самым образуют слой
Перейдите от степени один к двум, затем к трём. До каждого переключения сосчитайте перестановки нужного размера. Различайте число точек в слое и число значений градуировки.
Простейшие примеры одной и той же конструкции:
| Объекты | Градуированное множество | Степень | Слой | Число |
|---|---|---|---|---|
| Двоичные слова | ||||
| Перестановки | ||||
| Мономы от | Все мономы от | Полная степень | Мономы полной степени | |
| Упорядоченные суммы | Последовательности с суммой |
Индекс здесь несёт математическую информацию: он задаёт степень. Поэтому последовательность хранит не только значения
Сложение степеней порождает рекурсию
Таблица выше иллюстрировала только наличие градуировки. Теперь наложим дополнительное условие, которому не обязано удовлетворять произвольное градуированное множество: объект должен допускать каноническое разложение по последней присоединённой части.
Чтобы получить рекурсию, нужно однозначно обратить последний шаг этой операции. Предположим, что каждый объект положительной степени допускает представление
Снабдим множество допустимых частей
Потребуем, чтобы это представление
- Фиксируем степень последней части
- Разбиваем слой на непересекающиеся части
- Результат: Переходим к числу объектов
Для упорядоченных разложений числа последнее слагаемое канонично, поэтому достаточно одного индекса
Теперь требуется работать со всей последовательностью
Сохранение координат
Представление должно быть инъективным и коэффициентно-линейным. Индексу
Сложение индексов определяет базис
Рекурсия из предыдущего раздела имеет вид
Свёртка последовательностей
Свёрткой последовательностей
Следовательно, исходная рекурсия записывается как
Пара имеет степень
Односторонние последовательности полагаются равными нулю при отрицательных индексах. Зафиксируем
Начните с нулевого индекса, затем сдвигайте строку по одной позиции. Перед сдвигом назовите новую пару множителей и пару, которая перестанет участвовать. Объясните, почему развернуть одну строку необходимо.
Область перекрытия содержит ровно пары
Свёртка переходит в умножение
Представление должно переводить свёртку в умножение.
Пусть
Для образов
Здесь
Коэффициент произведения считает разложения
Возьмём
Для нулевой степени найдите единственную допустимую пару. Затем выберите степень три и перечислите допустимые разложения с учётом степеней обоих многочленов. Сравните число пар с суммой их весов: это одна и та же величина лишь в специальном случае.
При умножении рядов равенство
Тем самым
Теперь оба исходных требования выполнены: коэффициенты восстанавливаются по правилу
Обыкновенная производящая функция
Обыкновенной производящей функцией (ordinary generating function, OGF) последовательности
Если коэффициенты лежат в кольце
Оператор
Рекурсия как свёртка с ядром
Вернёмся к конструкции из раздела 2. Пусть
Удаление последнего слагаемого даёт рекурсию
Последовательность
Коэффициент перед
Поэтому для
В общем случае рекурсии
При первом доступном индексе вычислите следующий член по двум предыдущим. Сдвиньте ядро на один шаг и повторите вычисление. Какие коэффициенты остаются прежними и какие данные заменяются?
Остаётся включить начальные условия. При
Поэтому единственная поправка требуется при нулевом индексе, и вся последовательность удовлетворяет уравнению
От свёртки к производящей функции
Производящая функция ядра равна
- Переводим свёртку в произведение
- Результат: Подставляем функцию ядра
Соберём слагаемые с
- Собираем слагаемые с производящей функцией
- Результат: Делим на обратимый множитель
Переход к последней строке корректен в кольце формальных рядов: ряд
С этого момента исходная задача принимает точную алгебраическую форму: нужно разложить полученную рациональную функцию в формальный степенной ряд при
Коэффициенты этого разложения и есть искомая последовательность. Рациональную функцию можно разложить двумя способами: последовательно находить коэффициенты из равенства
Сначала применим оба способа к примеру Фибоначчи, а затем сформулируем их для произвольных многочленов
Читаем коэффициенты последовательно
Сдвиг ряда на
В данном случае достаточно выписать три сдвинутых ряда:
Теперь вычтем вторую и третью строки из первой и соберём одинаковые степени
Правая часть исходного равенства — постоянный ряд
Таким образом, сравнение коэффициентов возвращает начальные условия и исходную рекурсию.
Получаем явную формулу
Чтобы выразить коэффициент непосредственно через
- Факторизуем знаменатель
- Результат: Разлагаем на простейшие дроби
В кольце формальных рядов геометрическое разложение имеет вид
Коэффициент при
При нумерации
Способ 1. Последовательное извлечение коэффициентов
В примере Фибоначчи рациональная функция допускала два чтения: сравнение коэффициентов восстанавливало рекурсию, а разложение знаменателя давало явную формулу. Теперь отделим эти два метода от конкретного примера и рассмотрим произвольную рациональную производящую функцию.
Пусть
Запишем
- Раскрываем коэффициент произведения
- Приравниваем коэффициенту правой части
- Результат: Выражаем неизвестный коэффициент
Здесь
От рациональной функции к явной формуле
Исходная задача — разложить рациональную функцию
Предыдущий способ последовательно находит коэффициенты этого ряда из равенства
Идея: перейти к функциям с известными рядами
Извлечение коэффициента линейно. Поэтому вместо прямого разложения одной сложной дроби достаточно представить её как конечную линейную комбинацию функций, степенные ряды которых уже известны. Для этого введём семейство
Семейство функций Gλ,r
При
Искомое представление имеет форму
Здесь
1. Отделяем уже готовую часть
Многочлен
- Делим числитель на знаменатель
- Результат: Отделяем многочленную часть
Если
2. Знаменатель определяет базис
Поскольку
- Факторизуем знаменатель по корням
- Выносим множитель из каждого корня
- Собираем постоянный множитель
- Результат: Используем единичную нормировку
Именно на втором шаге возникает деление на корень: после вынесения постоянного множителя
Введём обратные к корням величины
Теперь знаменатель непосредственно указывает, какие функции
Теорема о разложении на простейшие дроби утверждает, что этих функций достаточно: правильная дробь единственным образом представляется в виде
Таким образом, искомый базис — это семейство
Числа
3. Находим координаты ρⱼ,ᵣ
Числа
- Записываем разложение по базису
- Результат: Умножаем на общий знаменатель
Каждое выражение
Пример: два простых множителя
Пусть
- Разлагаем по двум базисным дробям
- Получаем числитель
- Результат: Сравниваем коэффициенты
Определитель этой системы равен
Если множитель
Для простого множителя соответствующую координату можно получить без решения всей системы: умножить дробь на
При кратности
Итак, координаты
4. Извлекаем коэффициенты базисных функций
Для
Координаты
Равенство
Начните с простого множителя и последовательно увеличивайте кратность. До переключения предскажите степень полинома перед экспонентой. Проверьте ответ по общей формуле, а не только по нескольким первым членам.
Теперь подставим найденный коэффициент в разложение
- Подставляем базисное разложение
- Результат: Извлекаем коэффициент
При фиксированном
Поскольку
Структура коэффициентов рациональной функции
Для всех достаточно больших
Простой множитель