Рассмотрена комбинаторная проблема подсчета числа перестановок с ограничениями. Приведены практические задачи, сводящиеся к задаче о беспорядках. Представлено разработанное программное средство для вычисления рассматриваемых комбинаторных чисел.
Ключевые слова: комбинаторика, перестановки, число беспорядков.
Изучение основных правил комбинаторики традиционно завершается рассмотрением метода включений и исключений. Иллюстрацией применения этого метода является так называемая задача о беспорядках.
Исторически первой задачей подобного рода является задача Эйлера.
Задача Эйлера. Войдя в ресторан, n гостей оставили швейцару свои шляпы, а на выходе получили их обратно. Швейцар раздал шляпы случайным образом. Сколько имеется вариантов, в которых каждый гость получил чужую шляпу?
В общем виде задача формулируется следующим образом: рассмотрим перестановки n различных предметов, при которых ни один предмет не стоит на своём первоначальном месте. Такие перестановки называются беспорядками , смещениями или субфакториалами . [1]
Число их можно найти по формуле включений и исключений
Проделав ряд преобразований, можно представить эту формулу в таком виде:
Такие комбинаторные числа обладают рядом свойств. Например, известна рекуррентная формула
Можно привести также другую рекуррентную формулу для числа беспорядков:
Ослабим требование задачи и разрешим некоторым элементам оставаться на своем месте.
Перестановки n различных предметов, при которых ровно k предметов стоят на своих первоначальных местах, называют перестановкой с k встречами . Количество их выражается числом
Задача. Рассеянный почтальон должен разнести 10 писем по 10 адресам. Сколькими способами он может разложить письма по почтовым ящикам так, чтобы а) ни один адресат не получил адресованное ему письмо; б) ровно 5 человек получили адресованные им письма? [2]
Решение.
а) Искомое число способов равно
б) Искомое число способов равно
Задача. Сколько существует перестановок различных предметов, при которых на своих первоначальных местах окажутся ровно 2 или ровно 6 предметов?
Решение.
Количество различных перестановок девяти предметов, при которых на своих первоначальных местах окажутся ровно 2 предмета, равно
Приведем еще несколько практических содержательных задач, решение которых сводится к нахождению числа беспорядков или перестановок со встречами.
Задача. Две колоды карт, одну из которых заранее перетасовали, сравниваются карта за картой. Какова вероятность, что за все время просмотра не встретится ни одного совпадения?
Задача. Профессор дал четверым студентам контрольную работу, а затем предложил проверить ее друг у друга. Ни один студент не может проверять свою работу. Сколько имеется вариантов распределения работ?
Задача. Группа из 12 студентов играют в «Тайного Санту». Сколько имеется вариантов распределения подарков, если никто не должен получить собственный подарок?
Задача. Девять художников представили свои картины на выставке. Каждая картина имеет номер, соответствующий номеру художника. Для шуточного конкурса решено изменить расположение картин, чтобы заставить зрителей гадать, где чья работа. С учетом условия, что максимум две картины могут остаться на своем месте, сколько существует способов переорганизовать выставку?
Так как значения этих комбинаторных чисел зависят не от конкретной задачи, а только от параметров n и k , их можно вычислить и свести в таблицу (см. табл. 1). В этом случае получаем хорошую задачу для тех, кто делает первые шаги в программировании.
Таблица 1
Числа беспорядков и перестановок с k встречами
n |
k | |||||||
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 | |
2 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
3 |
2 |
3 |
0 |
0 |
0 |
0 |
0 |
0 |
4 |
9 |
8 |
6 |
0 |
0 |
0 |
0 |
0 |
5 |
44 |
45 |
20 |
10 |
0 |
0 |
0 |
0 |
6 |
265 |
264 |
135 |
40 |
15 |
0 |
0 |
0 |
7 |
1854 |
1855 |
924 |
315 |
70 |
21 |
0 |
0 |
8 |
14833 |
14832 |
7420 |
2464 |
630 |
112 |
28 |
0 |
9 |
133496 |
133497 |
66744 |
22260 |
5544 |
1134 |
168 |
36 |
10 |
1334961 |
1334960 |
667485 |
222480 |
55650 |
11088 |
1890 |
240 |
11 |
14684570 |
14684571 |
7342280 |
2447445 |
611820 |
122430 |
20328 |
2970 |
12 |
176214841 |
176214840 |
88107426 |
29369120 |
7342335 |
1468368 |
244860 |
34848 |
13 |
2290792932 |
2290792933 |
1145396460 |
381798846 |
95449640 |
19090071 |
3181464 |
454740 |
14 |
32071101049 |
32071101048 |
16035550531 |
5345183480 |
1336295961 |
267258992 |
44543499 |
6362928 |
Для вычисления числа беспорядков была разработана программа на языке С. Блок-схема ее представлена на рисунке 1.
Рис. 1. Блок-схема программы вычисления числа беспорядков
При тестировании программы было установлено, что до значений n = 20 программа работает корректно. При увеличении значений n до 21 и выше, значение факториала, необходимого для подсчёта количества сочетаний, превысит значение 64 бита для переменной (это превышение типа данных long long). Поэтому для работы c n 21, если используется язык C, нужно использовать специальные библиотеки (GMP) или другие алгоритмы (расширения компиляторов GCC, CLANG для 128-битных значений).
Литература
- Виленкин Н. Я., Виленкин А. Н., Виленкин П. А. Комбинаторика: учебное пособие. — М.: «ФИМА» МЦНМО, 2023.
- Тишин В. В. Дискретная математика в примерах и задачах: учебное пособие. — СПб.: БХВ-Петербург, 2008.