Комбинаторные алгоритмы для программистов


Сколькими способами можно сделать такое


Общая постановка этих задач:
Задач 1. Раскладка по ящикам
Даны
Сколькими способами можно сделать такое
различных предметов и
Сколькими способами можно сделать такое
ящиков. Надо положить в первый ящик
Сколькими способами можно сделать такое
предметов, во второй -
Сколькими способами можно сделать такое
предметов,..., в
Сколькими способами можно сделать такое
-й -
Сколькими способами можно сделать такое
предметов, где
Сколькими способами можно сделать такое
. Сколькими способами можно сделать такое распределение?
Число различных раскладок по ящикам равно
Сколькими способами можно сделать такое
Эту формулу можно получить при решении следующей, на первый взгляд, совсем непохожей задачи:
Задача 2. Перестановки с повторением.
Имеются предметы
Сколькими способами можно сделать такое
различных типов. Сколько различных перестановок можно сделать из
Сколькими способами можно сделать такое
предметов первого типа,
Сколькими способами можно сделать такое
предметов второго типа, ...,
Сколькими способами можно сделать такое
предметов
Сколькими способами можно сделать такое
-го типа? Число элементов в каждой перестановке равно
Сколькими способами можно сделать такое
. Поэтому если бы все элементы были различны, то число перестановок равнялось бы
Сколькими способами можно сделать такое
. Но из-за того, что некоторые элементы совпадают, получится меньшее число перестановок. В самом деле, возьмем, например, перестановку
Сколькими способами можно сделать такое
(5.1)
в которой сначала выписаны все элементы первого типа, потом все элементы второго типа, ..., наконец, все элементы
Сколькими способами можно сделать такое
-го типа. Элементы первого типа можно переставлять друг с другом
Сколькими способами можно сделать такое
способами. Но так как все эти элементы одинаковы, то такие перестановки ничего не меняют. Точно так же ничего не меняют
Сколькими способами можно сделать такое
перестановок элементов второго типа, ...,
Сколькими способами можно сделать такое
перестановок элементов
Сколькими способами можно сделать такое
-го типа.
Перестановки элементов первого типа, второго типа и так далее можно делать независимо друг от друга. Поэтому элементы перестановки 5.1. можно переставлять друг с другом
Сколькими способами можно сделать такое
способами так, что она остается неизменной. То же самое верно и для любого другого расположения элементов. Поэтому множество всех
Сколькими способами можно сделать такое
перестановок распадается на части, состоящие из
Сколькими способами можно сделать такое
одинаковых перестановок каждая. Значит, число различных перестановок с повторениями, которые можно сделать из данных элементов, равно
Сколькими способами можно сделать такое
(5.2)
где
Сколькими способами можно сделать такое
.
Пользуясь формулой 5.2, можно ответить на вопрос: сколько перестановок можно сделать из букв слова "Миссисипи"? Здесь у нас одна буква "м", четыре буквы "и", три буквы "с" и одна буква "п", а всего 9 букв. Значит, по формуле 5.2 число перестановок равно
Сколькими способами можно сделать такое
Чтобы установить связь между этими задачами, занумеруем все
Сколькими способами можно сделать такое
мест, которые могут занимать наши предметы.
Каждой перестановке соответствует распределение номеров мест на
Сколькими способами можно сделать такое
классов. В первый класс попадают номера тех мест, на которые попали предметы первого типа, во второй - номера мест предметов второго типа и так далее. Тем самым устанавливается соответствие между перестановками с повторениями и раскладкой номеров мест по "ящикам". Понятно, что формулы решения задач оказались одинаковыми.
В рассмотренных задачах мы не учитывали порядок, в котором расположены элементы каждой части. В некоторых задачах этот порядок надо учитывать.
Задача 3. Флаги на мачтах.
Имеется
Сколькими способами можно сделать такое
различных сигнальных флагов и
Сколькими способами можно сделать такое
мачт, на которые их вывешивают. Значение сигнала зависит от того, в каком порядке развешены флаги. Сколькими способами можно развесить флаги, если все флаги должны быть использованы, но некоторые из мачт могут оказаться пустыми?
Каждый способ развешивания флагов можно осуществить в два этапа. На первом этапе мы переставляем всеми возможными способами данные
Сколькими способами можно сделать такое
флагов. Это можно сделать
Сколькими способами можно сделать такое
способами. Затем берем один из способов распределения
Сколькими способами можно сделать такое
одинаковых флагов по
Сколькими способами можно сделать такое
мачтам (число этих способов
Сколькими способами можно сделать такое
). Пусть этот способ заключается в том, что на первую мачту надо повесить
Сколькими способами можно сделать такое
флагов, на вторую -
Сколькими способами можно сделать такое
флагов, ..., на
Сколькими способами можно сделать такое
Сколькими способами можно сделать такое
флагов, где
Сколькими способами можно сделать такое
. Тогда берем первые
Сколькими способами можно сделать такое
флагов данной последовательности и развешиваем в полученном порядке на первой мачте; следующие
Сколькими способами можно сделать такое
флагов развешиваем на второй мачте и т.д. Ясно, что используя все перестановки
Сколькими способами можно сделать такое
флагов и все способы распределения
Сколькими способами можно сделать такое
одинаковых флагов по
Сколькими способами можно сделать такое
мачтам, получим все способы решения поставленной задачи. По правилу произведения получаем, что число способов развешивания флагов равно
Сколькими способами можно сделать такое

(5.3)
Вообще, если имеется
Сколькими способами можно сделать такое
различных вещей, то число способов распределения этих вещей по
Сколькими способами можно сделать такое
различным ящикам равно
Сколькими способами можно сделать такое
.

Содержание раздела