Вы находитесь на странице: 1из 23

4.

Комбинаторика

Зачем нужна комбинаторика?


Поясним на примере подсчѐта сложности алгоритма решения очень
известной в программировании задачи - задача о коммивояжере
(ЗОК).

ЗОК обманчива. Еѐ очень легко сформировать, но очень трудно


решить. Коммивояжер должен регулярно бывать в каждом из n
городов. Между каждый парой городов налажено воздушное
сообщение. Задача состоит в том, чтобы наладить такое расписание
полѐтов, чтобы коммивояжер вернулся в тот же город, из которого
отправился, побывав при этом ровно по одному разу во всех
остальных городах, причѐм время в пути должно быть
наименьшим.

Наивный алгоритм решения задачи состоит из трех шагов.


Алгоритм: Задача о коммивояжере (ЗОК)
Шаг 1: Найти все возможные маршруты
Шаг 2: Найти время в пути для всех маршрутов, найденных на
первом шаге
Шаг 3: Выбрать наименьшее время среди маршрутов

Пример 1. Для четырѐх городов даны времена полѐтов, найдите


наилучший маршрут.
Решение.
Выпишем все возможные маршруты.
Шаг 1:
1-2-3-4-1
1-2-4-3-1
1-3-2-4-1
1-3-4-2-1
1-4-2-3-1
1-4-3-2-1
Шаг 2: Вычислим время в пути для каждого маршрута:
1-2-3-4-1: 18+31+17+16=82
18+19+17+30=84

Шаг3: Выбираем кратчайший 1-2-3-4-1: =82


Более подробное описание решения для n городов помогает
понять, как подсчитать число операций в решении. Пусть
коммивояжеру нужно посетить n городов, один из которых
является началом пути. Тогда выбрать второй город можно (n-1)
способами. Следующий (n – 2) способами и получается число
маршрутов ( ) ( ) ( )
На втором шаге надо подсчитать время в пути для каждого
маршрута. Если на одно суммирование требуется k элементов
операций, то на n суммирований (это для каждого маршрута) n*k.
А для всех маршрутов ( ) (или О(n!)).
На третьем шаге нужно найти наименьшее время из ( )
то есть провести ,( ) - сравнений в итоге для всего
алгоритма требуется не более
(( ) ) операций порядок сложности алгоритма
равен ( ).

Принципы подсчета

1. Принцип умножения.

Принцип умножения
Пусть . Если процедура выбора состоит из m
последовательных и независимых шагов, причем на первом шаге
имеется возможностей выбора, на втором - возможностей, ...,
на m-ом шаге - возможностей, то общее число всех
возможностей

Пример.
В университете читают 6 лекционных курсов по физике. Каждый
студент, зарегистрировавшийся на один из этих курсов должен
записаться на один из 11 лабораторных курсов и на один из 12
семинаров по решению задач.
Допускается любая комбинация из курсов лекций,
лабораторий и семинаров.
Решение.
Пример.
Символы на экране электронных часов формируются путем
подсветки отдельных полосок на решѐтке прямоугольной формы.
Сколько всего символов из семи полосок?

Пример.
Покажите, что число подмножеств n-элементного множества равно

Решение.
Обозначим элементы n-элементного множества буквами
и поставим в соответствии 0 или 1 упорядоченный
набор - каждому подмножеству. То есть по два варианта на каждый
из n элементов.
2. Принцип сложения

Принцип сложения
Если имеется набор m пересекающихся множеств, причем в первом
из них элементов, во втором элементов, ..., в m-ом,
соответственно, элементов, то число всех возможностей сделать
выбор равно

Пример.
Надо узнать сколько чисел от 0 до 100 делится на 11 или 13. Введем
два множества
* +
* +
Поскольку , достаточно сложить мощности
множеств | | | |

Прежде чем применить принцип сложения, нужно выполнить два


шага. Во-первых, нужно проверить, что рассматриваемые
множества не пересекаются. Во-вторых, нужно подсчитать число
элементов в каждом из множеств, определенных на первом шаге.

Пример 2.
Сколько имеется способов выбрать девятку, или карту красной
масти сильнее девяти, или карту черной масти слабее 6 из
стандартной колоды карт?

3. Принцип разбиения множеств

Не всегда достаточно принципов умножения и сложения. Нередко


всю задачу надо разбивать на подзадачи. Для решения отдельной
подзадачи может потребоваться принцип умножения или сложения
или их комбинация.
3.1 Подсчёт элементов дополнения
Пример.
Сколько есть трѐхбуквенных слов, в которых какая-нибудь буква
повторяется, если для формирования слов используются буквы из
множества {a,b,c,d,e}?
Решение.
Проще подсчитать эти слова непрямо. Подсчитаем общее
количество слов, а затем число слов, в которых нет повторяющихся
букв, после этого останется найти разность этих чисел. Есть 5
различных способов выбрать букву на каждом из трѐх мест
В словах с неповторяющимися буквами:

Пример.
Сколько функций, отображающихся не взаимооднозначны?
* + * +
Решение.
Самый полный класс подсчитываемых объектов - это функции,
отображающие S на T, все их надо пересчитать. Кроме того, надо
выяснить сколько функций взаимооднозначны. Дальше остается
найти разность.
Всего функций
Взаимооднозначных функций
Невзаимооднозначных функций
3.2 Использование принципа Дирихле

Принцип Дирихле гласит, что если m объектов должны быть


размещены на n позициях, причем то по крайней мере
на одной позиции окажется не менее двух объектов.

Пример.
Клиенты банка должны выбрать четырехзначный код для своей
банковской карточки. Первые два знака кода должны быть
буквами, а последние два – цифрами. У банка 75000 клиентов.
Докажите, что хотя бы у двух клиентов четырѐхзначные коды
совпадают.
Решение.
Вначале воспользуемся принципом умножения для подсчѐта числа
кодов: теперь применим принцип
Дирихле: 75000 > 67600, значит, по меньшей мере у двух клиентов
коды совпадают.

Принцип Дирихле говорит лишь о том, что по крайней мере два


клиента выбрали один и тот же код. Обобщѐнный принцип
Дирихле дает больше информации.

Пример.
Пусть группа отдыхающих разбита на 159 команд. Сколько нужно
сформировать лиг, если в лиге должно содержаться не более 8
команд? 10 команд? 12 команд?
Решение.
Согласно обобщѐнному принципу Дирихле получается ответ:

Организаторам остается определить, какой размер может быть


удобнее.

В приложениях принцип Дирихле часто используют, чтобы


доказать неразрешимость некоторых задач.
Пример
Найдите число возможных различных номерных знаков, если они
должны соответствовать одной из следующих схем. Здесь D -
обозначает цифру (0...9), а L - букву (A,B,C,...,Z) Первая цифра не
должна быть равна нулю.
(a) DDDDDD
(b) DDDDDL
(c) DDDLDDD
(d) DDDLLL
Если предполагается выдать номера для 3 млн авто, то подойдут (c)
и (d) варианты.
Перестановки и сочетания
Определение 1
Пусть . Перестановкой n-элементного множества
называется некоторый линейно упорядоченный набор n элементов
этого множества. При r - перестановной n-элементного
множества называется линейно упорядоченный набор r элементов
этого множества.

Пример.
Перечислите все перестановки элементов a,b,c
Решение.
Обозначим через P(n,r) число r - перестановок n-элементного
множества. По определению положим P(n,0) = 1 для всех

Теорема 1.
Пусть . Тогда ( ) ( ) ( )

Доказательство проведѐм индукцией по n. Пусть и пусть


* ( ) ( ) ( )
(База индукции) Есть только один способ упорядочить
единственный элемент одноэлементного множества ( )

(Шаг индукции) Пусть Докажем, что и


( ) . То есть докажем, что ( ) ( ) ((
) ) для всех r, таких, что .

Пусть Х - произвольное множество с ( ) элементами, для


которого мы должны упорядочить r его элементов. Выберем
какой-нибудь из элементов Х, например x, – он будет первым
элементом в наборе. Это можно сделать способами. Остается
построить упорядоченный набор элементов из n элементов.
Согласно индуктивному предположению это можно сделать
( ) . Полное число упорядоченных наборов r
элементов, выбранных из ( ) элементного множества равно
( ) ( ) ( ) ( ) ( ( ) )
( ) (( ) ) ( )
Поэтому Согласно принципу математической индукции
* +.
Используя факториалы можно записать ( )
( )
Эта формула правдива и в случае r = 0.
Если ( ) (Напомним, 0! = 1)

Линейно упорядоченные наборы


Пример.
(a) Сколькими способами можно расставить на полке восемь
различных книг?
(b) А четыре книги из восьми?
(c) Четыре из восьми на одной полке, а оставшиеся четыре на
второй (то есть расставить восемь книг на двух полках по четыре
книги на каждой)
Решение.
(a) 8!
(b) ( )
(c) ( ) ( )
Бывают случаи, когда некоторые объекты должны быть размещены
на определенных позициях.
Пример.
Среди восьми книг имеются две книги по искусственному
интеллекту, три книги по операционным системам и три книги по
структурам данных.
(а) Сколько есть способов расставить эти книги так, чтобы книги по
одной тематике стояли рядом?
Решение.
Объеденим книги в каждой тематике в одну "книгу". Пусть ВК1 -
иск. интеллект, ВК2 - опер. системы, ВК3 - струк. данных. Первый
шаг - расставить три "книги". Это 3! способов. На втором, третьем,
четвертом шагах нужно найти сколько способов расставить книги
внутри ВК1, ВК2, ВК3.
(#способов_расставить_книги) =
(#способов_расставить_три_вида_книг) *
(#способов_расставить_книги_по_иск.инт) *
(#способов_расставить_книги_по_оп.сист.) *
(#способов_расставить_книги_по_стр.данных).
, - , -
(b) Сколько способов расставить книги таким образом, чтобы книги
по операционным системам смогли стоять рядом?
Решение.
Первый шаг объединить книги по операционным системам в одну.
Тогда всего книг 2+3+1=6. Число перестановок равно 6!. Затем
внутри "книги" – 3!.

(c) Сколько способов расставить так, чтобы две книги по иск.


интеллекту стояли на последних местах (самые крайние)?
Решение.
Найдем число вероятностей перестановок книг, стоящих перед
двумя книгами по иск. интеллекту. Их – 6. То есть 6! число
способов. Теперь учтем, что число способов расставить две
последние книги равно 2!, тогда
Циклические перестановки
До сих пор мы рассматривали перестановки, когда объекты
располагались в линейном порядке. Ситуация настолько меняется,
когда мы пытаемся подсчитать количество способов расставить n
человек за круглым столом. Три возможных способа.

i и ii – эквивалентны (соседи одинаковы) , а ii и iii – нет (соседи у А


разные).
Если возьмем кого-то и подсчитаем количество перестановок
относительно его, то получим ( ). Число циклических
перестановок 4 человек равно ( ) ( )
Сочетания

Определение 2.
Пусть - такие числа, что . Неупорядоченный
набор r элементов, выбранных из n-элементного множества,
называется сочетанием.

Пример
Перечислим все сочетания множества {a,b,c}
Решение
Сочетания могут состоять из 0, 1, 2, 3 элементов. Перечислим их
все:
* +* +* +* +* +* +* +
Число сочетаний по r элементов, выбранных из множества n
элементов, будем обозначать ( ). Кроме того, часто используют
обозначение ( ).
Заметим, что по определению ( ) полагают равным 1. при всех

(т.е и ( ) ).
Числа ( ) называют ещѐ биномиальными коэффициентами,
поскольку они входят в виде коэффициентов при степенях
переменных в разложение биномов вида ( ) . Мы это докажем
позднее.

Теорема 2
При
( )
( )
( ) ( )

Доказательство.
Число r-перестановок n-элементного множества равно ( )
Каждую r-перестановку можно получить, выбрав r-элементное
множество, не учитывая порядок его элементов, а затем упорядочив
эти элементы ( ) различными способами.
Поэтому
( ) ( ) ( )
( )
( )
( ) ( )
Следствие 1:
( ) ( )
Доказательство

( ) ( ( )) ( ) ( )
Пример.
Сколько существует различных комбинаций из пяти карт в покере?
Решение.
( )
( )
Пример.
Какой процент комбинаций в покере содержит каре?
(#комбинаций с каре) = (#способов сдать каре) * (#число способов
выбрать последнюю карту) = ( )

Пример. Пять карт одной масти, которые не идут по порядку. Такая


комбинация называется флэш.
Решение.
Вначале подсчитаем число комбинаций, в которых все пять карт
одной масти.
, значит ( )
Комбинация в которой все карты идут по порядку, называется
стрит. Стрит, в котором все карты одной масти, называется стрит
флэш (флэш рояль). Мы хотим вычесть число стрит флэшей этой
масти из ( ). Чтобы получить число стрит флэшей в одной
масти, заметим, что все пять карт одной масти в
последовательности определяются наименьшей картой в
последовательности. Туз 2 3 4 5 6 7 8 9 10 Валет Дама Король Туз.
Значит всего существует ( ) в одной масти
, ( ) ( )- ( )

Процент стрит флэшей:


Подсчет с повторяющимися объектами

1 Перестановки с повторениями
Типичная задача - подсчѐт перестановок букв в слове с
повторяющимися буквами. Пусть абракадабра. В этом слове пять
букв а, две буквы б, две буквы р, а буквы к и д - по одному разу.
Перестановки этих букв можно построить следующим образом.
Зафиксируем 5 из 11 позиций букв в этом слове для букв а. Это
можно сделать C(11,5) способами. Из оставшихся шести позиций
для букв выберем две для букв б. Это можно сделать ( )
способами. Затем выберем две из оставшихся четырех позиций для
букв р. Это ещѐ ( ) . Одну из оставшихся позиций
выберем для буквы к. Это можно делать ( ) способами. На
последнюю позицию поместим букву д. Согласно принципу
умножения общее число перестановок равно произведению
способов выбрать позиции для каждой из букв:
( ) ( ) ( ) ( ) ( )

Не имеет значения в каком порядке выбирать позиции для букв.


Например, вначале для р, затем для к, затем для а, затем для б,
затем для д.
( ) ( ) ( ) ( ) ( )

Приведенный пример - частный случай сформулированной ниже


теоремы, которая дает число перестановок n букв, когда
допускаются повторения.
Определение 1
Пусть символы. Пусть в множество n
входить по элементов , причем ∑ . Число
перестановок с повторениями этих n символов обозначается
( )
В обозначениях определения 1 не предусматривается, что члены
при как-либо упорядочены. Заметим, что ( ) ( )
обозначают совершенно разные понятия.

Теорема 1
Пусть - некоторая сумма положительных
чисел. Число способов выбрать объектов типа 1, - объектов
типа 2, ... , и - объектов типа k задается формулой
( ) ( ) ( ) ( )

Этот результат обобщает случай, когда все n букв в перестановке


различны, так как в этом случае в знаменателе стоят n факториалов
1!.

Пример
Сколько имеется перестановок букв в слове excellent?
Решение
( )
Пример
Сколькими способами 12 экзаменов можно разбить на три набора
по четыре экзамена в каждом?
Решение
По теореме 1 получаем
В полученном ответе не учитывается тот факт, что три множества
можно менять местами, поэтому окончательный ответ имеет вид:
Сочетания с повторениями
В процедурах, которые мы к этому моменту описали, мы
посчитывали число элементов прямо. Другой метод, используемый
при подсчете сочетаний с повторениями, состоит в том, чтобы
установить взаимно-обозначенное соответствие между случаями в
данной задаче и случаями в стандартной задаче.

В следующем примере как раз используется этот метод.


Допустим, трѐм малышам нужно раздать 10 одинаковых шариков.
Сколькими способами это можно сделать? Начнем с того, что
обозначим каждый шарик буквой Х:

Предположим, что первый и второй малыши получат по три


шарика, а третий - четыре. Отметим, на рисунке, поместив символ |
после того Х, который обозначает третий шарик. Затем поместим
ещѐ один символ | после шестого Х.
| |
Это соответствует тому, что второй малыш тоже получит три
шарика. Оставшиеся Х на позициях с 7 по 10 представляют четыре
шарика, полученные третьим малышом. Таким образом, разбиение
10 шариков состоит из двух множеств мощности 3 и одного
множества мощности 4, можно изобразить как XXX|XXX|XXXX.
Если какому-нибудь малышу шариков не достанется, то два
разделительных символа окажутся рядом. Таким образом, данная
схема описывает как те ситуации, когда в разбиении все множества
непусты, так и те ситуации, когда какие-то множества пусты.
Мы можем обобщить схему из задачи про малышей и шарики
на другие задачи. Для построения произвольного разбиения n
одинаковых элементов на k подмножеств вначале отметим
позиций. Из них позиций предназначаются для символов |.
Эти позиций, которые можно выбрать ( )
способами, полностью определяют разные разбиения множества n
элементов на k подмножеств. Этот пример - частный случай
следующей теоремы.

Теорема 2
Число разбиения n одинаковых объектов на k множеств, где
равно ( )
Пример
Четыре члена футбольной команды сообща собираются продать
100 лотерейных билетов. Сколькими способами они могут
распределить эти билеты между собой?
Решение
( ) ( )
Надо разбить 100 элементов множества на четыре подмножеств.
Число способов сделать это даѐт теорема 2 при

Пример
Набор данных содержит 500 наблюдений. Эти данные
обрабатываются тремя программами. Все вместе они обрабатывают
результаты всех 500 наблюдений, причем каждая из них
обрабатывает не менее 100 результатов. В остальном эти
результаты разбиваются на группы произвольно. Сколькими
способами можно это сделать?
Решение
( ) ( )
Пример
Сколько при имеется решений уравнения
относительно переменных .
Решение
переформулируем. Сколькими способами можно разложить n
шаром по r урнам?
( )

Пример
Сколько решений имеет уравнение

при условии, что - целые числа и , ,


?
Решение
В начале положим пять шаров в урны . Теперь остается
только выяснить, сколько имеется решений y уравнения

где . Это число


( ) ( )

Комбинаторные тождества
Теорема 3 (Тождество Ньютона)
Пусть . Тогда
( ) ( ) ( ) ( )

Доказательство.
( ) ( )
( ) ( )
( )
( ) ( ) ( )

Следствие 1
( ) ( )
Доказательство
Согласно теореме 3.
( ) ( ) ( ) ( )
Подставив в него , мы получаем
( ) ( ) ( ) ( )
( ) ( )
Следствие дает приемлемый способ вычисления биномиального
коэффициента.

Теорема 4 (Тождество Паскаля)


Пусть . Тогда
( ) ( ) ( )

Доказательство.
( ) ( )
( ) ( )
( ) ( ) ( )

( ) ( ) ( ) ( ) ( ) ( )
( ) ( ) ( )

( )
Биномиальные коэффициенты.
Пример
Выписать разложение ( )
Решение
Это разложение можно найти, выбрав всеми возможными
способами по одному члену из трѐх сомножителей и перемножив
выбранные члены. Чтобы пересчитать, перенумеруем
( ) ( ) ( ) ( )

( ) ( ) ( ) ( )

Теорема 5 (Биномиальная теорема)


Пусть . Для любых x и y
( ) ( ) ( ) ( )

( ) ∑ ( )

Доказательство.
По индукции с применением тождества Паскаля.

Теорема 6. При
( ) ( ) ( )
Следствие 2.
Число подмножеств n-элементного множества равно

Теорема 7. Для

∑ ( )( )

Доказательство.
В биномиальной формуле положим .

Следствие 3. Для четных n


∑ ( ) ∑ ( )

Следствие 4. Для нечѐтных n

∑ ( ) ∑ ( )

Следствия 3 и 4 говорят о том, что в любом n - элементном


множестве число подмножеств с чѐтным числом элементов
совпадает с числом подмножеств с нечѐтным числом элементов.
Треугольник паскаля.

Из тождества Паскаля следует

Вам также может понравиться