Комбинаторика. Учебное пособие
.pdf
Разбиения чисел
∞
∑ P ′(n, {1, 2, 4, 8, })x n = (1 + x)(1 + x 2 )(1 + x 4 ) =
n=0 |
|
|
|
|
|||||
|
1 − x 2 |
|
1 − x 4 |
|
1 − x8 |
|
|
1 |
∞ |
= |
|
|
= |
|
= ∑ x n . |
||||
1 − x 1 − x 2 1 − x 4 |
|
|
|||||||
|
1 |
− x |
n=0 |
||||||
Разбиения чисел
Обратимся к разбиениям чисел на суммы, используя в качестве метода исследования производящие функции, впервые использованные в этой задаче Эйлером. Пусть P (n, {a, b, c, }) — число разбиений натурального числа n на суммы, слагаемые в которых берутся из множества {a, b, c, } с возможными повторениями. Производящая функция для P (n, {a, b, c, }) есть
∞
∑ P (n, {a, b, c, })x n = (1 + x a + x 2a + x3a + x 4a + ) ×
n=0
× (1 + x b + x 2b + )(1 + x c + x 2c + ) = = (1 − x a )−1(1 − x b )−1(1 − x c )−1 .
Производящая функция для числа разбиений на натуральные слагаемые есть
∞ P(n) x n = (1 − x )−1 (1 − x 2 )−1 (1 − x3 )−1 .
∑
n=0
Производящая функция для числа разбиений на нечётные слага-
емые есть
∞ |
(1 − x )−1 (1 − x3 )−1 (1 − x5 )−1 . |
∑ P (n,{1, 3, 5, })x n = |
|
n=0 |
|
61
РАЗДЕЛ 3. ПРОИЗВОДЯЩИЕ ФУНКЦИИ И РЕКУРРЕНТНЫЕ СООТНОШЕНИЯ
Пусть теперь P ′(n, {a, b, c, }) — число разбиений натурального числа на суммы, слагаемые в которых берутся из множества {a, b, c, } без повторений. Для производящей функции имеем
∞
∑ P ′(n, {a, b, c, })x n = (1 + x a ) (1 + x b )(1 + x c ) .
n=0
Производящая функция для числа разбиений на натуральные слагаемые без повторений
∞
∑ P ′(n) x n = (1 + x)(1 + x 2 )(1 + x3 ) .
n=0
Производящая функция для числа разбиений на нечётные слагаемые без повторений
∞
∑ P ′(n,{1, 3, 5, })x n = (1 + x)(1 + x3 )(1 + x5 ) .
n=0
С помощью производящих функций можно получить следующий интересный результат о числе разбиений.
Для каждого натурального n число его разбиений на слагаемые без повторений равно числу его разбиений на нечётные слагаемые с
|
|
|
|
|
|
|
′ |
|
(n, {1, 3, 5, }) |
|
|
||||||
озможными повторениями P (n) = P |
|
|
|||||||||||||||
|
|
|
|
∞ |
|
n |
|
|
|
2 |
|
3 |
|
|
|
|
|
|
|
|
|
′ |
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
∑ P (n) x |
= (1 + x)(1 + x |
)(1 + x |
) |
= |
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
n=0 |
|
|
− x 2 )(1 + x 2 )(1 − x3 )(1 + x3 ) |
|
|
||||||||
|
|
= |
(1 |
− x)(1 + x)(1 |
= |
|
|||||||||||
|
|
|
|
(1 − x)(1 − x 2 )(1 − x3 ) |
|
|
|
|
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
|||||||
= |
|
(1 − x 2 )(1 − x 4 )(1 |
− x6 ) |
|
= |
|
|
|
1 |
|
|
|
= |
||||
|
− x)(1 − x 2 )(1 − x3 )(1 − x 4 ) |
|
|
|
|
|
|
|
|||||||||
(1 |
|
|
(1 − x)(1 − x3 )(1 − x5 ) |
||||||||||||||
∞
= ∑ P (n, {1, 3, 5, })x n .
n=0
62
Разбиения чисел
Путём очень тонкого анализа производящей функции P( ) Харди и Рамануджан в 1918 г. получили выражение для P( ) в виде асимптотического ряда. Эта формула в 1937 г. была уточнена Радемахером, который получил для P( ) выражение в виде быстро сходящегося ряда. Вот эта замечательная формула
|
1 |
|
∞ |
P(n) = |
|
∑ Ak (n) |
|
π |
|
||
|
2 k =1 |
||
где
Ak (n) =
|
d |
|
1 |
|
|
|
π |
2 |
|
1 |
|
|
|
|
|
|
|
|
|
|
|
|
, |
||||||||
k |
|
|
|
|
|
|
|
n − |
|
|
|||||
dn |
|
|
|
sh |
|
3 |
|
|
|
||||||
|
n − |
1 |
|
k |
|
24 |
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
24 |
|
|
|
|
|
|
|
|
|
|
|
|
∑ eπi( s(m, k )−2nm k ) .
0 ≤ m < k, (m, k ) =1
Условие (m k) 1 означает, что m и k взаимно просты.
sh(x) — гиперболический синус, sh(x) e x e x
2
При вычислениях берётся целая часть от результата, даваемого этой формулой. Ряд очень быстро сходится. Например, для P(200)
правильный результат (P(200) 3 972 999 029 388) дают уже первые
восемь членов ряда:
3 972 998 993 185,896 + 36 282,978 – 87,555 + 5,147 + 1,424 +
+ 0,071 + 0,000 + 0,043 3 972 999 029 388,004.
Трудоёмкость вычислений на компьютере по этой формуле имеет
1 +ε
порядок n2 , где ε — произвольно малая величина. Рекордное значение P(1020) было вычислено в 2014 г. Его запись содержит свыше 11 миллиардов цифр.
63
РАЗДЕЛ 3. ПРОИЗВОДЯЩИЕ ФУНКЦИИ И РЕКУРРЕНТНЫЕ СООТНОШЕНИЯ
Формула Добинского
Информация о комбинаторных числах в методе производящих функций извлекается путём аналитической работы с бесконечными рядами, порождаемыми последовательностями этих чисел, что требует определённых навыков такой работы и аналитической техники. Продемонстрируем мощь метода производящих функций на сравнительно несложном в техническом отношении, но классическом примере вывода формулы Добинского для чисел Белла, которая в разделе 2 была приведена без доказательства.
Заметим прежде всего, что
∞ |
x |
i |
∞ |
|
x |
i +k |
|
∞ |
(i + k)! |
|
x |
i +k |
|
∞ |
(i + k)! x |
i +k |
|
|||
x k e x = x k ∑ |
|
= ∑ |
|
= ∑ |
|
|
|
= ∑ |
|
= |
||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||
i ! |
|
i ! |
(i + k)! i ! |
i ! (i + k)! |
||||||||||||||||
i =0 |
i =0 |
|
|
|
i =0 |
|
i =0 |
|
||||||||||||
|
|
|
|
|
∞ |
|
x m |
∞ |
|
|
|
x m |
|
|
|
|
|
|
||
|
|
|
= ∑ Amk |
= ∑ Amk |
|
|
|
|
|
|||||||||||
|
|
|
|
m! |
|
|
|
|
|
|||||||||||
|
|
|
|
m=k |
|
m! m=0 |
|
|
|
|
|
|
|
|
||||||
так как Ak 0 при m ≤ k −1. Рассматривая теперь для чисел Стир- |
||||||||||||||
m |
|
|
|
|
∞ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
линга производящую функцию ∑ Snk x k |
и используя полученные |
|||||||||||||
|
|
|
|
k =0 |
|
|
|
|
|
|
|
|
|
|
ранее соотношения, найдём |
|
|
|
|
|
|
|
|
|
|||||
∞ |
|
∞ |
|
|
|
∞ |
|
∞ |
x |
m |
||||
e x ∑ Snk x k = ∑ Snk x k e x = ∑ Snk ∑ Amk |
|
= |
||||||||||||
|
|
|||||||||||||
k =0 |
k =0 |
k =0 |
|
m=0 |
m! |
|||||||||
∞ |
x |
m |
∞ |
|
∞ |
x |
m |
|
|
|
||||
= ∑ |
|
∑ Amk Snk = ∑ |
|
mn . |
|
|
|
|||||||
m! |
|
|
|
|
|
|||||||||
m=0 |
k =0 |
m=0 |
m! |
|
|
|
||||||||
Подставляя в полученное тождество x |
|
1, получаем формулу |
||||||||||||
Добинского |
|
|
|
|
∞ |
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
m |
n |
|
|
|
|
|
|
||
|
|
Bn = |
∑ |
|
|
|
|
|
|
|
|
|||
|
|
|
m! |
|
|
|
|
|
|
|||||
|
|
|
|
e m=0 |
|
|
|
|
|
|
||||
64
Рекуррентные последовательности
Рекуррентные последовательности
Производящие функции могут быть эффективно использованы для исследования последовательностей, заданных линейными
рекуррентными соотношениями. Первые k членов такой последо-
вательности задаются, а каждый последующий член находится по k членам, ему предшествующим, с помощью заданного линейного соотношения. Термин «рекуррентный» введён Муавром, впервые применившим метод производящих функций для решения линейных рекуррентных соотношений. Помимо метода производящих функций им был сделан целый ряд других важных математических открытий, в частности получена знаменитая предельная теорема Муавра — Лапласа в теории вероятностей.
Простейшими линейными рекуррентными последовательностями являются арифметическая прогрессия, задаваемая соотношением an+1 = an + d, и геометрическая прогрессия, задаваемая соотношением bn+1 = q bn . У этих рекуррентных последовательностей каждый последующий член определяется предыдущим, а первый член задаётся, поэтому получение формулы для го члена не составляет труда: an = a1 +(n −1) d, bn = b1 qn−1. Задача становится нетривиальной, если каждый последующий член определяется двумя или большим числом предыдущих членов
Рассмотрим пример рекуррентной последовательности {un } u0 + + u1 u2 , у которой каждый член, начиная с третьего, выражается через два предыдущих с помощью соотношения un 2 4un+1 −3un, а два первых члена равны u0 8, u1 10. С помощью рекуррентного соотношения, используя заданные значения 0 и
получаем, что 2 16, 3 |
34 и т.д. Задача состоит в том, чтобы |
найти в явном виде формулу |
го члена |
65
РАЗДЕЛ 3. ПРОИЗВОДЯЩИЕ ФУНКЦИИ И РЕКУРРЕНТНЫЕ СООТНОШЕНИЯ
Помножив обе части рекуррентного соотношения на x n 2 и про-
уммировав по |
получим |
|
∞ |
∞ |
∞ |
∑un+2 x n+2 = 4 x ∑un+1 x n+1 −3x 2 |
∑un x n . |
|
n=0 |
n=0 |
n=0 |
Отсюда для производящей функции
U ( x) = u0 + u1 x + u2 x 2 +
имеем соотношение
U ( x) −u0 −u1 x = 4 x(U ( x) −u0 ) −3x 2U ( x);
U ( x) −8 −10x = 4 x(U ( x) −8) −3x 2U ( x).
U( ), получаем
U ( x) = |
−22x +8 |
= |
−22x +8 |
|
( x −1)(3x −1) |
||
|
3x 2 − 4 x +1 |
||
Разложим полученное дробно-рациональное выражение на простейшие дроби
−22x +8 |
= |
a |
+ |
b |
( x −1)(3x −1) |
|
x −1 |
3x −1 |
|
где a и b подлежащие определению числа. Так как
a |
+ |
b |
= |
(3a + b)x −(a + b) |
x −1 3x −1 |
( x −1)(3x −1) |
|||
находим неизвестные a и b из системы уравнений
3a + b = −22+ = −a b 8 ,
66
Рекуррентные последовательности
что даёт |
–7, b |
|
–1, и разложение приобретает вид |
|||||||||||||||
|
|
U ( x) = |
|
|
−22 x +8 |
= |
−7 |
+ |
−1 |
= |
|
7 |
+ |
|
1 |
|||
|
( x −1)(3x −1) |
|
|
|
|
|
−3x |
|||||||||||
|
|
|
|
|
x −1 3x −1 1 |
− x 1 |
||||||||||||
|
Далее имеем |
|
7 |
|
= 7(1 + x + x 2 + ) |
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|||||||||
|
|
|
1 |
− x |
|
|
|
|
|
|
|
|
|
|
||||
и |
1 |
=1 |
+(3x) +(3x)2 + |
|
|
|
|
|
|
|
|
|
|
|||||
1 −3x |
|
|
|
|
|
|
|
|
|
|
||||||||
Таким образом, окончательно получаем разложение U(x) в степенной ряд в виде
∞
U ( x) = 7(1 + x + x 2 + ) +1 +(3x) +(3x)2 + = ∑(7 +3n )x n .
n=0
Это позволяет выписать формулу n-го члена:
un = 7 +3n
Использованный здесь метод является общим приёмом для решения линейных рекуррентных соотношений, суть которого можно выразить следующим образом:
1)из заданного рекуррентного соотношения получаем линейное уравнение для производящей функции, решая которое, находим производящую функцию последовательности;
2)раскладывая производящую функцию в ряд, находим члены искомой последовательности как коэффициенты этого степенного ряда.
Рассмотрим теперь, как рекуррентные соотношения возникают в реальных перечислительных задачах. Пусть требуется найти число
Fn двоичных последовательностей длины n, не содержащих двух единиц подряд. При n 1 имеются две такие последовательности:
(0)и (1). При n 2 таких последовательностей три: (0, 0), (0, 1),
(1, 0). Поэтому F1 2, F2 3.
67
РАЗДЕЛ 3. ПРОИЗВОДЯЩИЕ ФУНКЦИИ И РЕКУРРЕНТНЫЕ СООТНОШЕНИЯ
Разобьём искомое множество последовательностей длины на два подмножества: последовательности, начинающиеся с 0, и последовательности, начинающиеся с 1. Последовательности первого типа не имеют каких-либо дополнительных ограничений на последующие – 1 символов. Поэтому их F –1. Последовательности второго типа на второй позиции обязаны содержать 0, а на последующие – 2 символов нет каких-либо ограничений, поэтому их F –2 Это приводит к рекуррентному соотношению
Fn = Fn−1 + Fn−2 ,
т.е. каждый член последовательности, начиная с третьего, равен сумме двух предыдущих членов. Положим F0 1. Тогда рекуррентное соотношение будет выполняться, начиная со второго члена.
Вместе с начальными данными F0 |
1 и F |
2 оно позволяет найти |
любой член последовательности F0 |
F F2 |
… F , ... . Вот первые |
семь членов: 1, 2, 3, 5, 8, 13, 21, ... |
|
|
Данная последовательность называется последовательностью Фибоначчи,поимени впервыерассмотревшегоеёитальянскогоматематикаXIIIвека.Онавозниклавпридуманнойимсвоеобразнойзадаче
о размножении кроликов. Пара кроликов, появившись на свет, даёт
вкачестве приплода каждый месяц, исключая первый месяц после рождения, ещё пару кроликов. Некто покупает одну взрослую пару и ежемесячно считает число имеющихся у него пар, которое может быть найдено с помощью указанного рекуррентного соотношения.
Для получения формулы -го члена в явном виде домножим обе
части рекуррентного соотношения на |
и просуммируем по от 2 |
||
до |
|
|
|
∞ |
∞ |
|
∞ |
∑ Fn x n = ∑ Fn−1 x n + ∑ Fn−2 x n . |
|||
n=2 |
n=2 |
|
n=2 |
Это позволяет для производящей функции |
|||
F ( x) = F |
+ F x |
+ F x 2 +... + F x n +... |
|
0 |
1 |
2 |
n |
68
Рекуррентные последовательности
получить соотношени |
|
|
|
|
|
|
|
|
F ( x) −1 − 2x = x |
( |
F ( x) −1 + x 2 F ( x). |
||||
|
|
) |
|
|
|
|
|
|
|
|
|
|
F |
|
( ), получаем |
|
|
|
|
|
|||
|
|
|
|
|
|
||
|
|
|
|
|
|
||
|
F ( x) = − |
x +1 |
|
||||
|
x 2 + x −1 |
||||||
|
|
|
|||||
Разлагаем данное рациональное выражение на простейшие дроби:
x 2 + x −1 = (x − x1 ) (x − x2 ), где |
x1 = |
−1 + |
|
5 |
x2 = |
−1 |
− |
||||||||||||||||||||||||||||||||||||||
|
2 |
|
|
|
|
|
2 |
||||||||||||||||||||||||||||||||||||||
|
F ( x) = |
|
a |
|
|
+ |
|
|
b |
|
|
= − |
|
|
|
|
|
|
x −1 |
|
|
|
|
|
|
|
|
|
|||||||||||||||||
|
x − x1 |
x − x2 |
|
|
(x − x1 )(x − x2 ) |
|
|
|
|
|
|
||||||||||||||||||||||||||||||||||
|
|
|
|
|
|
a (x − x2 )+ b (x − x1 ) = −x −1. |
|
|
|
|
|
|
|
|
|
||||||||||||||||||||||||||||||
Подставляя x |
|
x1, получаем |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||||
|
|
|
|
|
|
|
|
|
a = − |
|
|
x1 +1 |
|
= − |
1 + 5 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
x1 − x2 |
|
|
|
2 |
|
5 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||
Подставляя x |
|
x2, получаем |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||||
|
|
|
|
|
|
|
|
|
b = − |
x2 +1 |
= − |
1 − 5 |
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
x1 − x2 |
|
|
|
2 |
|
5 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||
Для производящей функции F |
|
(x) имеем |
|
n |
|
|
|
∞ |
|
|
|||||||||||||||||||||||||||||||||||
|
|
|
|
|
|
|
|||||||||||||||||||||||||||||||||||||||
|
|
|
|
|
|
|
|||||||||||||||||||||||||||||||||||||||
F ( x) = − |
1 |
|
|
a |
|
|
− |
1 |
|
|
|
|
b |
|
|
|
|
|
|
|
a ∞ |
x |
|
b |
|
x |
|||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
− |
|
|
|
|
|
|
|
|
− |
|
|
|
|
|
|
|
|
|
|||||
x |
|
x |
|
|
x |
|
|
|
|
|
|
|
|
x |
|
|
x ∑ |
|
x |
|
∑ |
|
|
|
|||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
x |
|
|
|
x |
|
||||||||||||||||||||||||
|
1 1 |
− |
|
|
|
|
|
2 |
1 − |
|
|
|
|
|
|
|
|
1 n=0 |
1 |
|
|
2 |
n=0 |
|
|
2 |
|||||||||||||||||||
|
x1 |
|
|
|
|
x2 |
|
|
|
|
|
||||||||||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||
5
n
∞ |
|
a |
|
b |
|
|
−∑ |
|
+ |
x n . |
|||
|
|
|||||
n=0 |
|
n+1 |
n+1 |
|||
x1 |
|
x2 |
|
|||
69
РАЗДЕЛ 3. ПРОИЗВОДЯЩИЕ ФУНКЦИИ И РЕКУРРЕНТНЫЕ СООТНОШЕНИЯ
Отсюда -й член последовательности Фибоначчи равен
|
|
|
|
|
|
|
|
|
|
5 +1 |
|
n+2 |
|
|
|
|
|
5 −1 |
|
n+2 |
|
|
F = − |
|
a |
− |
|
b |
= |
1 |
|
+ |
( |
−1 |
n+1 |
|
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||
|
n+1 |
|
n+1 |
|
|
|
|
|
|
|
||||||||||||
n |
x |
|
x |
|
|
|
2 |
|
|
|
) |
|
|
2 |
|
|
|
|||||
|
|
|
2 |
|
5 |
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||
Заметим, что второй член в квадратных скобках стремится к нулю с ростом n. Поэтому для нахождения n-го члена последовательности достаточно найти вклад, даваемый первым членом, и округлить результат до ближайшего целого числа.
Несмотря на простоту исходного рекуррентного соотношения, формула общего члена оказалась не слишком простой. Во времена Фибоначчи в математике еще не было средств для её нахождения. Она была найдена значительно позже. Сам же Леонардо из Пизы наслаждался последовательным вычислением числа пар кроликов с помощью своего рекуррентного соотношения. К его восторгу следует отнестись с уважением, ведь это была первая в истории математики рекуррентная последовательность после известных с античных времён арифметической и геометрической прогрессий. Последовательность Фибоначчи обладает многими интересными свойствами, которые интенсивно изучались математиками последующих веков.
Производящая функция частичных сумм
∞
Пусть a0 , a1, , an, последовательность, A( x) = ∑an x n
n=0
её производящая функция. Рассмотрим последовательность частич-
n
ных сумм s0 , s1, , sn, , где sn = ∑ai , с производящей функцией
i =0
∞
S( x) = ∑ sn x n, и найдём связь между производящими функциями
n=0
A( x) и S( x). Для последовательности {si } имеет место очевидное
70
