Производящая функция — различия между версиями
(sta) |
InFameBoy (обсуждение | вклад) (Операции над производящими функциями и пара примеров) |
||
| Строка 32: | Строка 32: | ||
<tex>=\dfrac{1}{1-x}\dfrac{1}{1-x^3}\dfrac{1}{1-x^5}\ldots=\prod\limits_{n=1}^\infty(1+x^{ 2n - 1})^{-1}</tex> | <tex>=\dfrac{1}{1-x}\dfrac{1}{1-x^3}\dfrac{1}{1-x^5}\ldots=\prod\limits_{n=1}^\infty(1+x^{ 2n - 1})^{-1}</tex> | ||
| + | |||
| + | == Операции над производящими функциями == | ||
| + | === Умножение на скаляр === | ||
| + | Умножение производящей функции на скаляр <tex>k</tex> увеличивает каждый производимый ей элемент в <tex>k</tex> раз: | ||
| + | |||
| + | <tex>\langle1, 0, 1, 0, 1, 0,...\rangle \xleftrightarrow{} 1 + x^2 + x ^4 + x^6 + ... = \frac{1}{1-x^2}</tex> | ||
| + | |||
| + | Умножение производящей функции на <tex>2</tex> даёт | ||
| + | |||
| + | <tex>\frac{2}{1 - x^2} = 2 + 2x^2 + 2x^4 + 2x^6 + ...</tex> | ||
| + | |||
| + | что производит следующую последовательность: | ||
| + | |||
| + | <tex>\langle2,0,2,0,2,0,...\rangle</tex> | ||
| + | |||
| + | Если <tex>\langle f_0,f_1,f_2,...\rangle \xleftrightarrow{} F(x), \text{тогда} \langle cf_0,cf_1,cf_2,...\rangle \xleftrightarrow{} c \cdot F(x)</tex> | ||
| + | |||
| + | === Сложение производящих функций === | ||
| + | |||
| + | Сложение производящих функций <tex>A \text{ и } B</tex> соответствует производящей функции <tex>C</tex>, такой что <tex>c_n = a_n + b_n</tex> | ||
| + | |||
| + | <tex>\langle f_0,f_1,f_2,... \xleftrightarrow{} F(x)</tex> | ||
| + | |||
| + | |||
| + | <tex>+ \langle g_0,g_1,g_2,... \rangle \xleftrightarrow{} G(x)</tex> | ||
| + | |||
| + | |||
| + | <tex>= \langle f_0+g_0,f_1+g_1,f_2+g_2,... \rangle \xleftrightarrow{} F(x) + G(x)</tex> | ||
| + | |||
| + | === Сдвиг вправо === | ||
| + | |||
| + | Пусть у нас есть производящая функция <tex>\langle 1,1,1,1,... \rangle \xleftrightarrow{} \frac{1}{1-x}</tex> | ||
| + | |||
| + | Мы можем сдвинуть её вправо, добавив <tex>k</tex> ведущих нулей: | ||
| + | |||
| + | <tex>\langle 0,0,...,0,1,1,1,... \rangle \xleftrightarrow{} x^k + x^{k+1} + x^{k+2} + x^{k+3} + ... = x^k \cdot (1 + x + x^2 + x^3 + ...) = \frac{x^k}{1-x}</tex> | ||
| + | |||
| + | То есть чтобы сдвинуть производящую функцию на <tex>k</tex> элементов в право, нужно умножить её на <tex>x^k</tex> | ||
| + | |||
| + | === Дифференцирование производящей функции === | ||
| + | |||
| + | Дифференцирование проиводящей функции сдвигае её элементы влево на одни элемент и умножает каждый элемент на его индекс: | ||
| + | |||
| + | <tex>\frac{d}{dx}(1 + x + x^2 + x^3+x^4 + ...) = \frac{d}{dx}\big(\frac{1}{1-x}\big)</tex> | ||
| + | |||
| + | |||
| + | <tex>\frac{d}{dx} + x\frac{d}{dx} + x^2 \frac{d}{dx} + x^3 \frac{d}{dx} + x^4 \frac{d}{dx} + ... = \frac{d}{dx}\big(\frac{1}{1-x}\big)</tex> | ||
| + | |||
| + | |||
| + | <tex>1 + 2x + 3x^2 + 4x^3 + ... = \frac{1}{(1-x)^2}</tex> | ||
| + | |||
| + | |||
| + | <tex>\langle 1,2,3,4,... \rangle \xleftrightarrow{} \frac{1}{(1-x)^2}</tex> | ||
| + | |||
| + | {{Задача | ||
| + | | about = | ||
| + | | definition = Найти производящую функцию для последовательности квадратов <tex>\langle 0,1,4,9,16,... \rangle</tex> | ||
| + | }} | ||
| + | |||
| + | Мы можем взять последовательность <tex>\langle 1,1,1,1,...\rangle</tex>, | ||
| + | давайте два раза продиффиренцируем производящую функцию для этой последовательности, чтобы получить желаемый результат. Проблема в том, что дифференцирование производит сдвиг в лeво, и в результате мы получим: | ||
| + | |||
| + | <tex>\frac{d}{dx}\frac{d}{dx}\langle 1,1,1,1,...\rangle = \langle4,9,16,...\rangle</tex> | ||
| + | |||
| + | Чтобы избежать потери первых двух элементов последовательности, мы можем применять сдвиг вправо после каждого дифференцирования: | ||
| + | |||
| + | <tex>\langle 1,1,1,1,...\rangle \xleftrightarrow{} \frac{1}{1-x}</tex> | ||
| + | |||
| + | |||
| + | <tex>\langle 1,2,3,4,...\rangle \xleftrightarrow{} \frac{d}{dx}\frac{1}{1-x} = \frac{1}{(1-x)^2} </tex> | ||
| + | |||
| + | |||
| + | <tex>\langle 0,1,2,3,...\rangle \xleftrightarrow{} x \cdot \frac{1}{(1-x)^2} = \frac{x}{(1-x)^2}</tex> | ||
| + | |||
| + | |||
| + | <tex>\langle 1,4,9,16,...\rangle \xleftrightarrow{} \frac{d}{dx}\frac{x}{(1-x)^2} = \frac{1+x}{(1-x)^3} </tex> | ||
| + | |||
| + | |||
| + | <tex>\langle 0,1,4,9,...\rangle \xleftrightarrow{} x \cdot \frac{1+x}{(1-x)^3} = \frac{x(1+x)}{(1-x)^3}</tex> | ||
| + | |||
| + | === Произведение производящих функций === | ||
| + | |||
| + | {{Утверждение | ||
| + | |statement = Пусть <tex>A \text{ и } B</tex> - классы | ||
| + | объектов, и <tex>A(x) \text{ и } B(x)</tex> - их производящие функции. Тогда классу <tex>C = A \times B \text{ соответствует производящая функция } C(x) = A(x)B(x).</tex> | ||
| + | |||
| + | |proof = Пусть <tex>c_n</tex> - число объектов размера <tex>n</tex> в декартовом произведении <tex>C = A \times B </tex>. Эти объекты полученны выбором объекта <tex>a \in A \text{ размера } k \leq n \text{ и объекта } b \in B \text{ размера } n-k</tex>. | ||
| + | |||
| + | Таким образом | ||
| + | |||
| + | <tex>c_n = \displaystyle\sum_{k = 0}^{n} a_k b_{n-k}.</tex> | ||
| + | |||
| + | Рассмотрим произведение производящих функций | ||
| + | |||
| + | <tex>A(x)B(x) = \Bigg(\displaystyle\sum_{k \geq 0}^{} a_k x^k\Bigg) \times \Bigg(\displaystyle\sum_{k \geq 0}^{} b_k x^k \Bigg).</tex> | ||
| + | |||
| + | <tex>A(x)B(x) = \displaystyle\sum_{n \geq 0}^{} \Bigg(\displaystyle\sum_{k \geq 0}^{n} a_k b_{n-k}\Bigg)x^n</tex> | ||
| + | }} | ||
| + | |||
| + | {{Задача | ||
| + | | about = | ||
| + | | definition = Дана шестигранная игральная кость, грани которой пронумерованный от <tex>1 \text{ до } 6</tex> и восьмигранная игральная кость, грани которой пронумерованны от <tex>1 \text{ до } 8</tex>. Мы кидаем кости и получаем сумму чисел, которые выпали на костях. Нужно найти число способов получить каждую сумму. | ||
| + | }} | ||
| + | |||
| + | Представим производящую функцию <tex>C(x) = \displaystyle_{n \geq 0}^{} c_n x^n</tex> как: | ||
| + | |||
| + | <tex>C(x) = (x+ x^2 + x^3 + x^4 + x^5 + x^6) \times (x + x^2 + x^3 + x^4 + x^5 + x^6 + x^7 + x^8)</tex> | ||
| + | |||
| + | первая часть учитывает все возможные исходы первой кости, а вторая часть учитывает исходы второй кости. Например, сумму <tex>5</tex> можно разбить на <tex>2</tex> с первой кости и <tex>3</tex> со второй. Такой исход учитывается умножением <tex>x^2</tex> из первой последовательности на <tex>x^3</tex> из второй. | ||
| + | |||
| + | <tex>C(x) = x^2 + 2x^3 + 3x^4 + 4x^5 + 5x^6 + 6x^7 + 6x^8 + 6x^9 + 5x^{10} + 4x^{11} + 3x^{12} + 2x^{13} + x^{14}</tex> | ||
== Примеры решений задач методом производящих функций == | == Примеры решений задач методом производящих функций == | ||
| Строка 256: | Строка 367: | ||
* [[Нахождение количества разбиений числа на слагаемые|Нахождение количества разбиений числа на слагаемые. Пентагональная теорема Эйлера]] | * [[Нахождение количества разбиений числа на слагаемые|Нахождение количества разбиений числа на слагаемые. Пентагональная теорема Эйлера]] | ||
* Graham, Knuth, and Patashnik: Concrete Mathematics | * Graham, Knuth, and Patashnik: Concrete Mathematics | ||
| + | * [https://math.mit.edu/~goemans/18310S15/generating-function-notes.pdf generation-function-notes] | ||
| + | * [http://www.math.cmu.edu/~lohp/docs/math/2011-228/mit-ocw-generating-func.pdf mit-ocw-generating-func] | ||
[[Категория: Дискретная математика и алгоритмы]] | [[Категория: Дискретная математика и алгоритмы]] | ||
[[Категория: Комбинаторика]] | [[Категория: Комбинаторика]] | ||
[[Категория: Подсчёт числа объектов]] | [[Категория: Подсчёт числа объектов]] | ||
Версия 15:54, 6 января 2021
| Определение: |
| Производящая функция (англ. generating function) — это формальный степенной ряд вида , порождающий (производящий) последовательность . |
Метод производящих функций был разработан Эйлером в 1750-х годах.
Содержание
Применение
Производящая функция используется для:
- Компактной записи информации о последовательности.
- Нахождения зависимости для последовательности , заданной рекуррентным соотношением. Например, для чисел Фибоначчи.
- Нахождения рекуррентного соотношения для последовательности — вид производящей функции может помочь найти формулу.
- Исследования асимптотического поведения последовательности.
- Доказательства тождеств с последовательностями.
- Решения задачи подсчета объектов в комбинаторике. Например, в доказательстве пентагональной теоремы или в задаче нахождения количества расстановок ладей на доске .
- Вычисления бесконечных сумм.
Примеры производящих функций
Рассмотрим производящие функции для различных комбинаторных последовательностей:
- — производящая функция для разности количества разбиений числа в четное и нечетное число различных слагаемых. Например, коэффициент при равен , потому что существует два разбиения на четное число различных слагаемых и одно на нечетное (). Правильность этого легко осознать, если понять, что каждая скобка представляет какое-то слагаемое и мы можем его взять (второе слагаемое — ) или не взять (первое — ). Эта производящая функция используется в комбинаторном доказательстве пентагональной теоремы.
- — производящая функция для последовательности , где — число разбиений числа на слагаемые.
- — производящая функция для последовательности , где — число разбиений на различные слагаемые.
- — производящая функция для последовательности , где — число разбиений на нечётные слагаемые. С помощью метода производящих функций можно доказать, что производящие функции последовательностей равны, соответственно :
Операции над производящими функциями
Умножение на скаляр
Умножение производящей функции на скаляр увеличивает каждый производимый ей элемент в раз:
Умножение производящей функции на даёт
что производит следующую последовательность:
Если
Сложение производящих функций
Сложение производящих функций соответствует производящей функции , такой что
Сдвиг вправо
Пусть у нас есть производящая функция
Мы можем сдвинуть её вправо, добавив ведущих нулей:
То есть чтобы сдвинуть производящую функцию на элементов в право, нужно умножить её на
Дифференцирование производящей функции
Дифференцирование проиводящей функции сдвигае её элементы влево на одни элемент и умножает каждый элемент на его индекс:
| Задача: |
| Найти производящую функцию для последовательности квадратов |
Мы можем взять последовательность ,
давайте два раза продиффиренцируем производящую функцию для этой последовательности, чтобы получить желаемый результат. Проблема в том, что дифференцирование производит сдвиг в лeво, и в результате мы получим:
Чтобы избежать потери первых двух элементов последовательности, мы можем применять сдвиг вправо после каждого дифференцирования:
Произведение производящих функций
| Утверждение: |
Пусть - классы
объектов, и - их производящие функции. Тогда классу |
|
Пусть - число объектов размера в декартовом произведении . Эти объекты полученны выбором объекта . Таким образом
Рассмотрим произведение производящих функций
|
| Задача: |
| Дана шестигранная игральная кость, грани которой пронумерованный от и восьмигранная игральная кость, грани которой пронумерованны от . Мы кидаем кости и получаем сумму чисел, которые выпали на костях. Нужно найти число способов получить каждую сумму. |
Представим производящую функцию как:
первая часть учитывает все возможные исходы первой кости, а вторая часть учитывает исходы второй кости. Например, сумму можно разбить на с первой кости и со второй. Такой исход учитывается умножением из первой последовательности на из второй.
Примеры решений задач методом производящих функций
Решение рекуррентных соотношений
Существует целый класс последовательностей, задаваемых рекуррентным соотношением, например, — числа Фибоначчи или — числа Каталана. Метод производящих функций позволяет получить выражение для через номер элемента в последовательности в замкнутом виде, то есть в таком виде, что выражение можно вычислить, предполагая, что достаточно мало.
Пусть последовательность удовлетворяет некоторому рекуррентному соотношению. Мы хотим получить выражение для (при ) в замкнутом виде. Алгоритм получения замкнутого выражения для чисел , удовлетворяющих рекуррентному соотношению, с помощью производящих функций состоит из 4 шагов:
- Записать рекуррентное соотношение и начальные данные для него в следующем виде (если порядок соотношения равен , то есть количество предшествующих элементов, требуемых для вычисления элемента с номером , равно ):
- Домножить каждую строчку на в соответствующей степени и просуммировать строчки для всех .
- В полученном уравнении привести все суммы к замкнутому виду. Получить уравнение для производящей функции.
- Выразить в явном виде (решить уравнение, полученное на предыдущем шаге) и разложить производящую функцию в ряд по степеням .
Для демонстрации универсальности метода рассмотрим довольно произвольное рекуррентное соотношение:
Запишем производящую функцию для этой последовательности и преобразуем правую часть:
Для того, чтобы замкнуть последнюю сумму воспользуемся очень важным приемом, который используется при преобразовании производящих функций. Фактически мы имеем дело с последовательностью (в нашем случае последовательность ). Такая последовательность получается путём дифференцирования функции , производящей для , с последующим умножением результата на :
Тогда замкнем последнее слагаемое следующим образом:
Таким образом, наше последнее слагаемое примет вид:
Это уравнение для производящей функции. Из него выражаем :
Разложим знаменатель на множители и разобьём дробь на сумму простых дробей [1]:
Разложим первое слагаемое в ряд, используя расширенные биномиальные коэффициенты [2]:
Расчет дисперсии геометрического распределения
Метод производящих функций также используется для нахождения математического ожидания и дисперсии различных распределений в теории вероятностей. Например, в геометрическом распределении [3] для нахождения дисперсии нужно найти два мат. ожидания:
которые фактически являются производящими функциями последовательностей и :
.
Тогда:
Пример задачи на нахождение производящей функции
| Задача: |
| Рассмотрим множество путей на прямой, состоящих из шагов длины вправо и влево. Найдите производящую функцию для числа таких путей из шагов, начинающихся в и оканчивающихся в . |
Заметим, что для того, чтобы закончить путь в , необходимо совершить равное число шагов вправо и влево. Тогда задача сводится к тому, чтобы выбрать позиций для, например, шагов вправо из всего шагов. Тогда ответом будет сумма от нуля до бесконечности по всех . То есть: Рассмотрим , где — число Каталана. Тогда, заметим что . Так как , то справедливо равенство:
Мы знаем, что производящая функция для чисел Каталана равна . Найдем .
Соответственно, ответом будет производящая функция вида:
| Задача: |
| Рассмотрим множество путей на прямой, состоящих из шагов длины вправо и влево. Найдите производящую функцию для числа таких путей из шагов, начинающихся и оканчивающихся в и не заходящих в отрицательную полупрямую. |
Заметим, что задача аналогична Правильной скобочной последовательности. Тогда производящей функцией для нашей задачи будет производящая функция для правильной скобочной последовательности, а именно:
Приложения
Примеры простых производящих функций
На последнем шаге приведения производящей функции к замкнутому виду требуется разложить полученные слагаемые в ряд. Для этого можно воспользоваться таблицей основных производящих функций [4].
Все суммы выполняются по переменной от до . Элементы последовательности нумеруются от .
| Последовательность | Производящая функция в виде ряда | Производящая функция в замкнутом виде |
| ( нулей в начале) | ||
| (повторяется через ) | ||