
- •Оглавление
- •1. Множества
- •1.1. Основные понятия
- •1.2. Способы задания множеств
- •1.3. Операции над множествами
- •Приоритеты операций над множествами
- •1.4. Свойства операций над множествами
- •1.5. Методы доказательства теоретико-множественных тождеств
- •1.5.1. Метод двух включений
- •1.5.2. Метод эквивалентных преобразований
- •1.5.3. Метод характеристических функций
- •1.5.4. Метод логических функций
- •1.5.5. Теоретико-множественный метод
- •1.6. Способы представления множества в памяти эвм
- •1.7. Алгоритмы реализации операций над множествами
- •Практическое занятие 1.1 Операции над множествами
- •Задания
- •Варианты заданий
- •Практическое занятие 1.2 Теоретико-множественные тождества
- •Задания
- •Варианты заданий
- •Контрольные вопросы
- •2. Комбинаторные объекты
- •2.1. Введение
- •2.2. Метод поиска с возвращением
- •2.3. Подмножества
- •2.4. Перестановки
- •2.5. Размещения
- •2.6. Размещения с повторениями
- •2.7. Сочетания
- •2.8. Перестановки с повторениями
- •2.9. Сочетания с повторениями
- •2.10. Упорядоченные разбиения множества
- •2.11. Разбиения множества
- •2.12. Использование алгоритмов порождения комбинаторных объектов при проектировании полнопереборных алгоритмов решения задач выбора
- •2.13. О неэффективности полнопереборных алгоритмов. Пример
- •Времена обработки деталей на станках a и b
- •Времена окончания обработки деталей на станках a и b
- •Времена окончания обработки деталей на станках a и b
- •Времена окончания обработки деталей на станках a и b
- •Практическое занятие 2.1 Алгоритмы порождения комбинаторных объектов
- •Задания
- •Практическое занятие 2.2 Разбиения множеств
- •Задания
- •Количество упорядоченных разбиений
- •Практическое занятие 2.3
- •Задачи выбора
- •Цель занятия: приобретение практических навыков в использовании алгоритмов порождения комбинаторных объектов при проектировании алгоритмов решения задач выбора.
- •Задания
- •Варианты заданий
- •Контрольные вопросы
- •Библиографический список
2.9. Сочетания с повторениями
Сочетанием с повторениями из n элементов по k называется мультимножество мощности k, составленное из элементов n-элементного множества.
Например, из элементов множества М={1,2,3} можно составить такие сочетания по два с повторениями: {1,1}, {1,2}, {1,3}, {2,2}, {2,3}, {3,3}.
Теорема 2.7.
Количество различных сочетаний из n
элементов по k
с повторениями равно
.
Доказательство. Каждое сочетание полностью определяется, если указать, сколько раз входит каждый элемент множества в сочетание. Поставим в соответствие каждому сочетанию последовательность нулей и единиц, составленную по следующему правилу: ставим подряд столько единиц, сколько раз входит первый элемент множества в сочетание, далее ставим нуль, и после него пишем столько единиц, сколько раз входит первый элемент множества в это сочетание и т.д. Например, написанным выше сочетаниям из трех элементов по два будут соответствовать такие последовательности:
1100, 1010, 1001, 0110, 0101, 0011.
Таким
образом, каждому сочетанию с повторениями
из n
по k
соответствует последовательность из
k
единиц и n-1
нулей. Количество таких последовательностей
равно числу способов, которыми можно
выбрать n-1
мест для нулей из n+k-1
общего числа мест (
),
или, то же самое, - числу способов выбора
k
мест для единиц из n+k-1
мест (
).
Рассмотрим
алгоритм порождения сочетаний с
повторениями в неубывающем лексикографическом
порядке. Сочетания с повторениями из
трёх элементов по три (
),
в неубывающем лексикографическом
порядке запишутся следующим образом:
111 133
112 222
113 223
122 233
123 333
Сочетания с повторениями в лексикографическом порядке можно порождать, используя метод поиска с возвращением. Начиная с 1-го места будем последовательно формировать элементы сочетания F. На
первое место в сочетании можно ставить элементы из множества {1..n}. Формирование i-го элемента сочетания опишем рекурсивным алгоритмом 2.7, блок-схема которого представлена на рис.2.15. В цикле перебираются элементы множества {b..n}, которые можно поставить на i-ое место. Если на i-ое место поставлен элемент x, то минимальный элемент, который можно поставить на i+1–ое место, то же равен x. Если заполнено k-ое место, то сочетание сформировано и выводим его, иначе заполняем следующее i+1-ое место по алгоритму 2.7.
Алгоритм 2.7 порождения сочетаний с повторениями из n элементов по k.
Вход: i – заполняемое место в сочетании F;
b – минимальный элемент, который можно поставить на i-ое место.
Выход: последовательность всех сочетаний с повторениями из n элементов по k в неубывающем лексикографическом порядке.
Глобальные параметры: F – формируемое сочетание;
n – мощность множества;
k
– количество элементов в сочетании.
Fi
:=
x
+
Сочетание
(i+1,
x)
Рис.2.15. Рекурсивный алгоритм порождения сочетаний с повторениями
из n элементов по k
Пусть задано множество {1,2,3} и требуется получить все сочетания с повторениями из элементов этого множества по 3. Схема получения всех сочетаний по алгоритму 2.7 представлена на рис.2.16. В этой схеме представлены формируемые сочетания и множества, элементы которых можно поставить на очередное место в сочетании. В исходной ситуации все места сочетания неопределенны и на первое место можно поставить любой элемент множества {1,2,3}. В схеме к стрелкам приписаны номера действий. В результате выполнения первого действия на первое место сочетания ставится элемент 1 и на второе место после этого можно поставить любой элемент того же множества {1,2,3}. После выполнения
сочетание
3 {1,1,1)
множество
{1,2,3} 4 сочетание
сочетание {1,1,2)
{1,1,?} 5
2 сочетание
{1,1,3)
множество множество 7 сочетание
{1,2,3} 6 {2,3} {1,2,2)
сочетание сочетание 8
{1,?,?} {1,2,?} сочетание
9 {1,2,3)
1 множество
{3} 10 сочетание
сочетание {1,4,5)
множество {1,3,?}
{1,2,3}
с очетание 11 множество 13 сочетание
{?,?,?} 12 {2,3} {2,2,2)
множество сочетание 14
{2,3} {2,2,?} сочетание
сочетание 15 {2,2,3)
17 {2,?,?} множество
{3} 16 сочетание
сочетание {2,3,3)
{2,3,?}
множество множество
{3} 18 {3} 19 сочетание
сочетание сочетание {3,3,3)
{3,?,?} {3,3,?}
Рис.2.16. Схема получения всех сочетаний с повторениями
по алгоритму 2.7
действия 2 на второе место сочетания устанавливается элемент 1 и на третье место после этого опять можно поставить любой элемент множества {1,2,3}. После выполнения действия 3 первое сочетание {1,1,1} сформировано. Затем выполняется шаг назад и действие 4, ставящее элемент 2 из множества {1,2,3} на третье место и второе сочетание {1,1,2} сформировано и т.д. После выполнения шестого действия на второе место устанавливается элемент 2 и, после этого, на третье место можно поставить элемент из множества {2,3}, и следующее сочетание, после выполнения седьмого действия, будет {1,2,2}. Аналогичным образом формируются все остальные сочетания.