Конструирование комбинаторных объектов и их подсчёт — различия между версиями
Mervap (обсуждение | вклад) |
Mervap (обсуждение | вклад) (OGF + EGF) |
||
| Строка 35: | Строка 35: | ||
{{Утверждение | {{Утверждение | ||
|statement= | |statement= | ||
| − | Пусть <tex dpi="130">A=\{a_{1},a_{2}, \ldots ,a_{z}\}</tex> {{---}} множество из различных объектов, <tex dpi="130">P=PSet(A)</tex> {{---}} множество всех множеств, составленных из элементов <tex dpi="130">A</tex>, <tex dpi="130">W=\{w_{1},w_{2}, \ldots ,w_{l}\}</tex> {{---}} количество объектов веса от <tex dpi="130">1</tex> до <tex dpi="130">l</tex>. | + | Пусть <tex dpi="130">A=\{a_{1},a_{2}, \ldots ,a_{z}\}</tex> {{---}} множество из различных объектов, <tex dpi="130">P=PSet(A)</tex> {{---}} множество всех множеств, составленных из элементов <tex dpi="130">A</tex>, <tex dpi="130">W=\{w_{1},w_{2}, \ldots ,w_{l}\}</tex> {{---}} количество объектов веса от <tex dpi="130">1</tex> до <tex dpi="130">l</tex>. Мы также считаем, что нет объектов веса <tex dpi="130"">0</tex>. Тогда '''количество множеств''' суммарного веса <tex dpi="130">n</tex> можно вычислить как <tex dpi="150">P_{n}=p_{n, n}</tex>, где <tex dpi="150">p_{n, k}=\sum_{i=0}^{\lfloor \frac{n}{k} \rfloor} \binom{w_{k}}{i} p_{n-ik, k-1}</tex> {{---}} количество таких множеств, которые содержат объекты, вес которых не больше чем <tex dpi="150">k</tex>. Причем <tex dpi="150">p_{0, i} = 1</tex>, так как не набирать никакой вес есть один способ, а <tex dpi="150">p_{i, 0} = 0</tex>, <tex dpi="150"">i \ne 0</tex>, так как нельзя набрать положительный вес из ничего. |
|proof=Изначально у нас есть только пустое множество веса <tex dpi="130">0</tex>. Рассмотрим очередной этап вычисления <tex dpi="130">p_{n,k}</tex>. Для данных <tex dpi="130">n</tex> и <tex dpi="130">k</tex> у нас уже имеется множество, которое необходимо дополнить. Мы можем сделать это добавляя от <tex dpi="130">0</tex> до <tex dpi="130">\lfloor \frac{n}{k} \rfloor</tex> элементов веса <tex dpi="130">k</tex> (при условии, что столько различных элементов имеется) в данное множество. Следовательно, у нас образуется новые множества, которые будет необходимо дополнить элементами веса меньше <tex dpi="130">k</tex> (чтобы избежать повторений) суммарного веса <tex dpi="130">n-ik</tex>, где <tex dpi="130">i</tex> {{---}} количество элементов веса <tex dpi="130">k</tex> которое мы добавили в данное множество. Довольно легко заметить, что данные операции полностью соответствуют описанной выше формуле. | |proof=Изначально у нас есть только пустое множество веса <tex dpi="130">0</tex>. Рассмотрим очередной этап вычисления <tex dpi="130">p_{n,k}</tex>. Для данных <tex dpi="130">n</tex> и <tex dpi="130">k</tex> у нас уже имеется множество, которое необходимо дополнить. Мы можем сделать это добавляя от <tex dpi="130">0</tex> до <tex dpi="130">\lfloor \frac{n}{k} \rfloor</tex> элементов веса <tex dpi="130">k</tex> (при условии, что столько различных элементов имеется) в данное множество. Следовательно, у нас образуется новые множества, которые будет необходимо дополнить элементами веса меньше <tex dpi="130">k</tex> (чтобы избежать повторений) суммарного веса <tex dpi="130">n-ik</tex>, где <tex dpi="130">i</tex> {{---}} количество элементов веса <tex dpi="130">k</tex> которое мы добавили в данное множество. Довольно легко заметить, что данные операции полностью соответствуют описанной выше формуле. | ||
}} | }} | ||
| Строка 106: | Строка 106: | ||
{{Утверждение | {{Утверждение | ||
|statement= | |statement= | ||
| − | Пусть <tex dpi="130">A=\{a_{1},a_{2}, \ldots ,a_{z}\}</tex> {{---}} множество из различных объектов, <tex dpi="130">C=Cycle(A)</tex> {{---}} множество всех циклов <ref>[[wikipedia:Cyclic order|Wikipedia {{---}} Циклы]]</ref> из элементов <tex dpi="130">A</tex>, <tex dpi="130">W=\{w_{1},w_{2}, \ldots ,w_{m}\}</tex> {{---}} количество объектов веса <tex dpi="130">\{1 \ldots m\}</tex>. | + | Пусть <tex dpi="130">A=\{a_{1},a_{2}, \ldots ,a_{z}\}</tex> {{---}} множество из различных объектов, <tex dpi="130">C=Cycle(A)</tex> {{---}} множество всех циклов <ref>[[wikipedia:Cyclic order | Wikipedia {{---}} Циклы]]</ref> из элементов <tex dpi="130">A</tex>, <tex dpi="130">W=\{w_{1},w_{2}, \ldots ,w_{m}\}</tex> {{---}} количество объектов веса <tex dpi="130">\{1 \ldots m\}</tex>. |
Тогда '''количество циклов''' веса <tex dpi="150">n</tex> можно вычислить как <tex dpi="150">C_{n}=\sum_{s=1}^{n}c_{n, s}</tex>, где <tex dpi="150">c_{n,s}</tex> {{---}} количество циклов веса <tex dpi="150">n</tex> длины <tex dpi="150">s</tex>. | Тогда '''количество циклов''' веса <tex dpi="150">n</tex> можно вычислить как <tex dpi="150">C_{n}=\sum_{s=1}^{n}c_{n, s}</tex>, где <tex dpi="150">c_{n,s}</tex> {{---}} количество циклов веса <tex dpi="150">n</tex> длины <tex dpi="150">s</tex>. | ||
| Строка 140: | Строка 140: | ||
==Производящие функции== | ==Производящие функции== | ||
| − | + | Такие большие группы часто анализируют с помощью [[Производящая функция|производящих функций]]. Один из популярных методов {{---}} метод символов (англ. ''Symbolic method''). Он использует внутреннюю структуру объектов для получения производящих функций. В случае непомеченных объектов, как и в анализе в нашей статье, считается что нет объектов нулевого веса. Иногда для удобства их добавляют, чтобы показать наличие одного пустого множества. | |
| − | + | При непомеченных объектах рассмотренные классы имеют следующие производящие функции: | |
{| class="wikitable" | {| class="wikitable" | ||
| Строка 153: | Строка 153: | ||
!<tex dpi="130">Pair(A,B)</tex>||<tex dpi="130">A(z)B(z)</tex> | !<tex dpi="130">Pair(A,B)</tex>||<tex dpi="130">A(z)B(z)</tex> | ||
|-align="center" | |-align="center" | ||
| − | !<tex dpi="130">Cycle(A)</tex>||<tex dpi="130">\ln\dfrac{1}{1-A(z)}</tex> | + | !<tex dpi="130">Cycle(A)</tex>||<tex dpi="130">\sum\limits_{n \geqslant 1}\dfrac{\phi(n)}n\ln\dfrac{1}{1 - A(z^n)}</tex>, где <tex dpi="130">\phi(n)</tex> {{---}} [[Функция_Эйлера | функция Эйлера]]. |
|} | |} | ||
| + | |||
| + | Однако порой некоторые комбинаторные классы удобнее обозначать как помеченные. Например, {{---}} помеченные графы. С помеченными объектами используется экспоненциальная производящая функция. <ref>[[wikipedia:exponential generating function | Wikipedia {{---}} Exponential generating function]]</ref> В данном случае для рассмотренных классов используются следующие производящие функции: | ||
| + | |||
| + | {| class="wikitable" | ||
| + | |-align="center" | ||
| + | !<tex dpi="130">Seq(A)</tex>||<tex dpi="130">\dfrac{1}{1-A(z)}</tex> | ||
| + | |-align="center" | ||
| + | !<tex dpi="130">Pset(A)</tex>||<tex dpi="130">\exp(A(z))</tex> | ||
| + | |-align="center" | ||
| + | !<tex dpi="130">Mset(A)</tex>||<tex dpi="130">\prod\limits_{n \geqslant 1}\dfrac{1}{(1-z^{n})^{A_{n}}}=\exp(\sum\limits_{k \geqslant 1}\dfrac{A(z^{k})}{k})</tex> | ||
| + | |-align="center" | ||
| + | !<tex dpi="130">Pair(A,B)</tex>||<tex dpi="130">A(z)B(z)</tex> | ||
| + | |-align="center" | ||
| + | !<tex dpi="130">Cycle(A)</tex>||<tex dpi="130">\ln\dfrac{1}{1-A(z)}</tex>. | ||
| + | |} | ||
| + | |||
== См.также == | == См.также == | ||
| Строка 168: | Строка 184: | ||
*[https://www.youtube.com/playlist?list=PLrNmXMVD0XDSluoHUcasgvvmBAkf2BGLi Online Course Materials from Robert Sedgewick] | *[https://www.youtube.com/playlist?list=PLrNmXMVD0XDSluoHUcasgvvmBAkf2BGLi Online Course Materials from Robert Sedgewick] | ||
*[https://en.wikipedia.org/wiki/Generating_function Wikipedia {{---}} Generating function] | *[https://en.wikipedia.org/wiki/Generating_function Wikipedia {{---}} Generating function] | ||
| + | *[https://en.wikipedia.org/wiki/Symbolic_method_(combinatorics) Wikipedia {{---}} Symbolic method] | ||
[[Категория: Дискретная математика и алгоритмы]] | [[Категория: Дискретная математика и алгоритмы]] | ||
[[Категория: Комбинаторика]] | [[Категория: Комбинаторика]] | ||
Версия 00:34, 3 января 2018
Содержание
Последовательности (Seq)
| Утверждение: |
Пусть — множество из различных объектов, — множество всех последовательностей из элементов , — количество объектов веса от до . Мы считаем, что нет объектов веса , так как в противном случае существует бесконечное количество последовательностей любого веса. Тогда, количество последовательностей веса можно вычислить как . Причем , так как есть единственный способ составить пустую последовательность. |
|
Докажем по индукции. База .
Переход.
|
Подсчет битовых векторов длины
Пусть , — множество всех битовых векторов, .
Тогда, .
Подсчет Seq из маленьких и больших элементов
Пусть , , — множество всех последовательностей из маленьких и больших элементов, , .
Тогда, , где — -ое число Фибоначчи [1].
Подсчет подвешенных непомеченных деревьев с порядком на детях
Пусть — количество таких деревьев с вершинами, . — множество всех последовательностей из данных деревьев. — количество последовательностей с суммарным количество вершин . Чтобы получить дерево из вершин, достаточно взять вершину, и подвесить к ней последовательность деревьев с суммарным количеством вершин . Тогда:
- .
- , где — -ое число Каталана.
Множества (PSet)
| Утверждение: |
Пусть — множество из различных объектов, — множество всех множеств, составленных из элементов , — количество объектов веса от до . Мы также считаем, что нет объектов веса . Тогда количество множеств суммарного веса можно вычислить как , где — количество таких множеств, которые содержат объекты, вес которых не больше чем . Причем , так как не набирать никакой вес есть один способ, а , , так как нельзя набрать положительный вес из ничего. |
| Изначально у нас есть только пустое множество веса . Рассмотрим очередной этап вычисления . Для данных и у нас уже имеется множество, которое необходимо дополнить. Мы можем сделать это добавляя от до элементов веса (при условии, что столько различных элементов имеется) в данное множество. Следовательно, у нас образуется новые множества, которые будет необходимо дополнить элементами веса меньше (чтобы избежать повторений) суммарного веса , где — количество элементов веса которое мы добавили в данное множество. Довольно легко заметить, что данные операции полностью соответствуют описанной выше формуле. |
Количество PSet из элементов 0 и 1
Пусть , — множество всех множеств из , , . Тогда , где .
- .
- .
- .
- .
- Для , .
Количество разбиений на слагаемые
Пусть , — множество всех разбиений на слагаемые, , . Тогда,
- , где , что, как несложно заметить, соответствует формуле, полученной методом динамического программирования.
Мультимножества (MSet)
| Утверждение: |
Пусть — множество из различных объектов, — множество всех мультимножеств [2] из элементов , — количество объектов веса . Тогда количество мультимножеств из объектов суммарного веса можно вычислить как , где — количество таких мультимножеств, которые содержат объекты, вес которых не больше чем . |
| Рассуждения аналогичны рассуждениям , однако теперь мы можем брать один и тот же элемент несколько раз. То есть для подсчета вместо обычных сочетаний нужно использовать сочетания с повторениями. |
Количество MSet из элементов 0 и 1
Пусть , — множество всех множеств из , , .
- Тогда, , где
- .
- .
- .
- .
- .
Подсчет подвешенных непомеченных деревьев без порядка на детях
Пусть — количество таких деревьев с вершинами, . — множество всех лесов из данных деревьев, так как лес можно интерпретировать как мультимножество из деревьев. — количество лесов с суммарным количество вершин . — количество таких лесов из вершин, что деревья в них содержат не более чем вершин. Чтобы получить дерево из вершин, достаточно взять вершину и подвесить к ней лес деревьев с суммарным количеством вершин . Тогда:
- .
- .
- .
Количество таких деревьев с вершинами образуют последовательность [3]
Пары (Pair)
| Утверждение: |
Пусть , — множества из различных объектов, — множество всех пар объектов, составленных из элементов и . — количество объектов веса , составленных из элементов , а — соответственно для . Тогда количество пар из объектов суммарного веса можно вычислить как . |
| Чтобы составить пару веса нужно взять один элемент веса и элемент веса , что полностью соответствует данной формуле. |
Количество подвешенных неполных двоичных деревьев
Пусть — количество таких деревьев с вершинами, . — множество всех пар из данных деревьев. Чтобы получить двоичное дерево из вершин, достаточно взять вершину и подвесить к ней левого и правого сына с суммарным количеством вершин . Тогда:
- , где — -ое число Каталана.
Циклы (Cycle)
| Утверждение: |
Пусть — множество из различных объектов, — множество всех циклов [4] из элементов , — количество объектов веса .
Тогда количество циклов веса можно вычислить как , где — количество циклов веса длины . По лемме Бёрнсайда , где — количество стабилизаторов для циклического сдвига на . |
| Очевидно, что длина цикла веса может быть от до . Посмотрим сколько существует циклов каждой длины. Это можно сделать по лемме Бёрнсайда. |
Найдем в общем случае.
Пусть — наибольший общий делитель. Заметим, что в -ой перестановке на -ой позиции стоит элемент . Также, заметим, что элемент переходит в элемент , где . Из этого следует, что длина цикла для -ой перестановки равна , где — наименьшее общее кратное.
Также заметим, что если вес нельзя равномерно распределить по всей длине цикла, то стабилизатор равен .
Где — число способов упорядочить набор из элементов суммарного веса и
, причем .
Задача об ожерельях
Решим данным способом задачу об ожерельях. Пусть необходимый вес — это количество бусинок, а — количество цветов. Причем каждая бусинка весит . То есть .
так как невозможно набрать вес менее, чем бусинами при весе бусин .
. Поскольку все бусины имеют одинаковый вес , то
В итоге, .
Производящие функции
Такие большие группы часто анализируют с помощью производящих функций. Один из популярных методов — метод символов (англ. Symbolic method). Он использует внутреннюю структуру объектов для получения производящих функций. В случае непомеченных объектов, как и в анализе в нашей статье, считается что нет объектов нулевого веса. Иногда для удобства их добавляют, чтобы показать наличие одного пустого множества. При непомеченных объектах рассмотренные классы имеют следующие производящие функции:
| , где — функция Эйлера. |
|---|
Однако порой некоторые комбинаторные классы удобнее обозначать как помеченные. Например, — помеченные графы. С помеченными объектами используется экспоненциальная производящая функция. [5] В данном случае для рассмотренных классов используются следующие производящие функции:
| . |
|---|
См.также
- Лемма Бёрнсайда и Теорема Пойа
- Числа Каталана
- Генерация комбинаторных объектов в лексикографическом порядке