Порождение комбинаторных объектов
2.7. Подсчет количеств
Иногда можно найти количество объектов с тем или иным
свойством, не перечисляя их. Классический пример: -
число всех
-элементных подмножеств
-элементного множества - можно найти, заполняя таблицу по формулам



Приведем другие примеры.
2.7.1.
(Число разбиений; предлагалась на Всесоюзной олимпиаде
по программированию 1988 года) Пусть - число
разбиений целого положительного
на целые положительные
слагаемые (без учета порядка,
и
- одно и то
же
разбиение). При
положим
(единственное
разбиение не содержит слагаемых). Построить алгоритм
вычисления
для заданного
.
Решение. Можно доказать (это нетривиально) такую формулу
для :





Однако и без ее использования можно придумать способ
вычисления , который существенно эффективнее перебора
и подсчета всех разбиений.
Обозначим через (для
,
) число
разбиений
на целые положительные слагаемые, не
превосходящие
. (При этом
считаем
равным
для всех
.) Очевидно,
. Все
разбиения
на слагаемые, не превосходящие
,
разобьем
на группы в зависимости от максимального слагаемого
(обозначим его
). Число
равно сумме (по
всем
от
до
) количеств разбиений
со слагаемыми
не больше
и максимальным слагаемым, равным
.
А разбиения
на слагаемые не более
с первым
слагаемым, равным
, по существу представляют собой
разбиения
на слагаемые, не превосходящие
(при
). Так что


2.7.2.
(Счастливые билеты; предлагалась на Всесоюзной олимпиаде
по программированию 1989 года.) Последовательность из цифр (каждая цифра от
до
)
называется
счастливым билетом, если сумма первых
цифр равна сумме
последних
цифр. Найти число счастливых
последовательностей данной длины.
Решение. (Сообщено одним из участников олимпиады;
к сожалению, не могу указать фамилию, так как работы
проверялись зашифрованными.) Рассмотрим более общую задачу:
найти число последовательностей, где разница между суммой
первых цифр и суммой последних
цифр
равна
(
). Пусть
- число таких
последовательностей.
Разобьем множество таких последовательностей на классы
в зависимости от разницы между первой и последней цифрами.
Если эта разница равна , то разница между суммами групп
из оставшихся
цифр равна
. Учитывая, что пар
цифр с разностью
бывает
, получаем формулу


В некоторых случаях ответ удается получить в виде явной формулы.
2.7.3.
Доказать, что число Каталана (количество последовательностей длины из
единиц
и
минус
единиц, в любом начальном отрезке которых не меньше единиц,
чем минус единиц) равно
.
Указание. Число Каталана есть число ломаных, идущих из
в
шагами
и
, не
опускающихся
в нижнюю полуплоскость, т.е. разность числа всех ломаных
(которое есть
) и числа ломаных, опускающихся
в нижнюю полуплоскость. Последние можно описать также как
ломаные, пересекающие прямую
. Отразив их кусок
справа от самой правой точки пересечения относительно
указанной прямой, мы установим взаимно однозначное
соответствие между ними и ломаными из
в
.
Остается проверить, что
.