Производящая функция — различия между версиями
InFameBoy (обсуждение | вклад) |
InFameBoy (обсуждение | вклад) (Отмена правки 76506, сделанной 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] | ||
[[Категория: Дискретная математика и алгоритмы]] | [[Категория: Дискретная математика и алгоритмы]] | ||
[[Категория: Комбинаторика]] | [[Категория: Комбинаторика]] | ||
[[Категория: Подсчёт числа объектов]] | [[Категория: Подсчёт числа объектов]] |
Версия 00:49, 7 января 2021
Определение: |
Производящая функция (англ. generating function) — это формальный степенной ряд вида | , порождающий (производящий) последовательность .
Метод производящих функций был разработан Эйлером в 1750-х годах.
Содержание
Применение
Производящая функция используется для:
- Компактной записи информации о последовательности.
- Нахождения зависимости для последовательности , заданной рекуррентным соотношением. Например, для чисел Фибоначчи.
- Нахождения рекуррентного соотношения для последовательности — вид производящей функции может помочь найти формулу.
- Исследования асимптотического поведения последовательности.
- Доказательства тождеств с последовательностями.
- Решения задачи подсчета объектов в комбинаторике. Например, в доказательстве пентагональной теоремы или в задаче нахождения количества расстановок ладей на доске .
- Вычисления бесконечных сумм.
Примеры производящих функций
Рассмотрим производящие функции для различных комбинаторных последовательностей:
- — производящая функция для разности количества разбиений числа в четное и нечетное число различных слагаемых. Например, коэффициент при равен , потому что существует два разбиения на четное число различных слагаемых и одно на нечетное ( ). Правильность этого легко осознать, если понять, что каждая скобка представляет какое-то слагаемое и мы можем его взять (второе слагаемое — ) или не взять (первое — ). Эта производящая функция используется в комбинаторном доказательстве пентагональной теоремы.
- — производящая функция для последовательности , где — число разбиений числа на слагаемые.
- — производящая функция для последовательности , где — число разбиений на различные слагаемые.
- — производящая функция для последовательности , где — число разбиений на нечётные слагаемые. С помощью метода производящих функций можно доказать, что производящие функции последовательностей равны, соответственно :
Операции над производящими функциями
Умножение на скаляр
Умножение производящей функции на скаляр
увеличивает каждый производимый ей элемент в раз:
Умножение производящей функции на
даёт
что производит следующую последовательность:
Если
Сложение производящих функций
Сложение производящих функций
соответствует производящей функции , такой что
Сдвиг вправо
Пусть у нас есть производящая функция
Мы можем сдвинуть её вправо, добавив
ведущих нулей:
То есть чтобы сдвинуть производящую функцию на
элементов в право, нужно умножить её наДифференцирование производящей функции
Дифференцирование проиводящей функции сдвигае её элементы влево на одни элемент и умножает каждый элемент на его индекс:
Задача: |
Найти производящую функцию для последовательности квадратов |
Мы можем взять последовательность ,
давайте два раза продиффиренцируем производящую функцию для этой последовательности, чтобы получить желаемый результат. Проблема в том, что дифференцирование производит сдвиг в лeво, и в результате мы получим:
Чтобы избежать потери первых двух элементов последовательности, мы можем применять сдвиг вправо после каждого дифференцирования:
Произведение производящих функций
Утверждение: |
Пусть - классы
объектов, и - их производящие функции. Тогда классу |
Пусть - число объектов размера в декартовом произведении . Эти объекты полученны выбором объекта .Таким образом
Рассмотрим произведение производящих функций
|
Задача: |
Дана шестигранная игральная кость, грани которой пронумерованный от | и восьмигранная игральная кость, грани которой пронумерованны от . Мы кидаем кости и получаем сумму чисел, которые выпали на костях. Нужно найти число способов получить каждую сумму.
Представим производящую функцию как:
первая часть учитывает все возможные исходы первой кости, а вторая часть учитывает исходы второй кости. Например, сумму
можно разбить на с первой кости и со второй. Такой исход учитывается умножением из первой последовательности на из второй.
Примеры решений задач методом производящих функций
Решение рекуррентных соотношений
Существует целый класс последовательностей, задаваемых рекуррентным соотношением, например, числа Каталана. Метод производящих функций позволяет получить выражение для через номер элемента в последовательности в замкнутом виде, то есть в таком виде, что выражение можно вычислить, предполагая, что достаточно мало.
— числа Фибоначчи или —Пусть последовательность
удовлетворяет некоторому рекуррентному соотношению. Мы хотим получить выражение для (при ) в замкнутом виде. Алгоритм получения замкнутого выражения для чисел , удовлетворяющих рекуррентному соотношению, с помощью производящих функций состоит из 4 шагов:- Записать рекуррентное соотношение и начальные данные для него в следующем виде (если порядок соотношения равен
- Домножить каждую строчку на в соответствующей степени и просуммировать строчки для всех .
- В полученном уравнении привести все суммы к замкнутому виду. Получить уравнение для производящей функции.
- Выразить в явном виде (решить уравнение, полученное на предыдущем шаге) и разложить производящую функцию в ряд по степеням .
Для демонстрации универсальности метода рассмотрим довольно произвольное рекуррентное соотношение:
Запишем производящую функцию для этой последовательности и преобразуем правую часть:
Для того, чтобы замкнуть последнюю сумму воспользуемся очень важным приемом, который используется при преобразовании производящих функций. Фактически мы имеем дело с последовательностью (в нашем случае последовательность ). Такая последовательность получается путём дифференцирования функции , производящей для , с последующим умножением результата на :
Тогда замкнем последнее слагаемое следующим образом:
Таким образом, наше последнее слагаемое примет вид:
Это уравнение для производящей функции. Из него выражаем :
Разложим знаменатель на множители и разобьём дробь на сумму простых дробей [1]:
Разложим первое слагаемое в ряд, используя расширенные биномиальные коэффициенты [2]:
Расчет дисперсии геометрического распределения
Метод производящих функций также используется для нахождения математического ожидания и дисперсии различных распределений в теории вероятностей. Например, в геометрическом распределении [3] для нахождения дисперсии нужно найти два мат. ожидания:
которые фактически являются производящими функциями последовательностей и :
.
Тогда:
Пример задачи на нахождение производящей функции
Задача: |
Рассмотрим множество путей на прямой, состоящих из шагов длины | вправо и влево. Найдите производящую функцию для числа таких путей из шагов, начинающихся в и оканчивающихся в .
Заметим, что для того, чтобы закончить путь в число Каталана. Тогда, заметим что . Так как , то справедливо равенство:
, необходимо совершить равное число шагов вправо и влево. Тогда задача сводится к тому, чтобы выбрать позиций для, например, шагов вправо из всего шагов. Тогда ответом будет сумма от нуля до бесконечности по всех . То есть: Рассмотрим , где —Мы знаем, что производящая функция для чисел Каталана равна
. Найдем .
Соответственно, ответом будет производящая функция вида:
Задача: |
Рассмотрим множество путей на прямой, состоящих из шагов длины | вправо и влево. Найдите производящую функцию для числа таких путей из шагов, начинающихся и оканчивающихся в и не заходящих в отрицательную полупрямую.
Заметим, что задача аналогична Правильной скобочной последовательности. Тогда производящей функцией для нашей задачи будет производящая функция для правильной скобочной последовательности, а именно:
Приложения
Примеры простых производящих функций
На последнем шаге приведения производящей функции к замкнутому виду требуется разложить полученные слагаемые в ряд. Для этого можно воспользоваться таблицей основных производящих функций [4].
Все суммы выполняются по переменной
от до . Элементы последовательности нумеруются от .Последовательность | Производящая функция в виде ряда | Производящая функция в замкнутом виде |
( нулей в начале) | ||
(повторяется через ) | ||