- •Оглавление
- •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.8. Перестановки с повторениями
М
ножество,
которое может содержать одинаковые
элементы, называется мультимножеством.
Например М={1,1,2,3,1,2,3} - мультимножество,
которое содержит элементы 1, 2 и 3, причём
элемент 1 входит в мультимножество 3
раза, а элементы 2 и 3 – по два раза.
Мультимножества равны, если они состоят
из одних и тех же элементов, поэтому
{1,1,2,3,1,2,3}={1,1,1,2,2,3,3}, т.е. порядок расположения
элементов не важен. Мультимножество,
состоящее из конечного числа элементов,
называется конечным.
Количество
элементов в мультимножестве S
называется мощностью
мультимножества
и обозначается |S|.
Мощность
мультимножества М={1,1,2,3,1,2,3} равна семи,
|M|=7.
Количество
ni
вхождений
элемента si
в мультимножество S
называется кратностью
элемента.
Конечное мультимножество S
будем записывать в следующем виде:
Здесь
все si
различны и ki
– кратность элемента si.
Тогда мощность S
равна
.
Учитывая введённое обозначение,
мультимножество М={1,1,2,3,1,2,3} можно записать
так: {3*1,2*2,2*3}.
Перестановкой с повторениями называется расположенные в определенном порядке элементы мультимножества.
Теорема 2.6.
Число перестановок с повторениями для
мультимножества S={n1*s1,n2*s2,...,nk*sk}
выражается формулой
,
где
.
Доказательство. Рассмотрим одну перестановку мультимножества и заменим в ней все одинаковые элементы разными. Тогда, число различных перестановок, которые можно составить из рассматриваемой, равно n1!n2!…nk!. Проделав это для каждой перестановки, получим n! перестановок. Следовательно, Pn(n1,n2,…,nk)n1!n2!…nk!=n!. Отсюда
Алгоритм 2.6 (рис.2.13) порождения всех перестановок с повторениями практически не отличается от алгоритма 2.2 порождения всех перестановок множества, за исключением того, что в алгоритме 2.6 обрабатывается мультимножество.
Определим мультимножество С, являющееся результатом разности мультимножеств А и В (С=А-В). Если элемент универсума не принадлежит мультимножеству, то будем считать, что его кратность равна нулю. Элемент xC, если кратность kА элемента x в мультимножестве А больше кратности kВ элемента x в мультимножестве В и кратность kС элемента x в мультимножестве С определяется по формуле kC=kA-kB.
Алгоритм 2.6 порождения перестановок с повторениями.
Вход: М – мультимножество, элементы которого можно поставить на i-ое место;
i – заполняемое место в последовательности Р.
Выход: последовательность всех перестановок с повторениями.
Глобальные параметры: Р – формируемая перестановка с повторениями;
n – мощность мультимножества.
Рi
:=
x
+
Перестановка(М-{x},i+1)
Рис.2.13. Рекурсивный алгоритм порождения перестановок
с повторениями
Пусть задано мультимножество {1,1,2,2}={2*1,2*2} и требуется получить все перестановки с повторениями. Это мультимножество содержит элементы 1 и 2 кратности 2. Схема получения всех перестановок по алгоритму 2.6 представлена на рис.2.14. В этой схеме формируемые перестановки заключены в круглые скобки, а мультимножества, элементы которых можно поставить на очередное место в перестановке – в фигурные. В исходной ситуации все места перестановки неопределенны и на первое место можно поставить любой элемент мультимножества: 1 или 2. В схеме к стрелкам приписаны номера действий. В результате выполнения действия 1 на первое место перестановки устанавливается элемент 1, а на второе место после этого можно поставить любой элемент мультимножества {1,2,2}. После выполнения действия 2 на второе место перестановки устанавливается элемент 1, а на третье место после этого можно поставить любой элемент мультимножества {2,2}. После выполнения действий 3 и 4 первая перестановка {1,1,2,2} сформирована. Затем выполняется 3 шага назад и действие 5, ставящее второй элемент из мультимножества {1,2,2} на третье место, после чего на четвёртое место можно поставить любой элемент из мультимножества {1,2}. Далее, после последовательного выполнения действий 6 и 7 вторая перестановка {1,1,2,1} сформирована. Аналогичным образом формируются все остальные перестановки.
{1,1,2,2}
(?,?,?,?)
1 10
{1,2,2} {1,1,2}
(1,?,?,?) (2,?,?,?)
2
5 11
16
{2,2} {1,2} {1,2} {1,1}
(1,1,?,?) (1,2,?,?) (2,1,?,?) (2,2,?,?)
3 6 7 12 14 17
{2} {2} {1} {2} {1} {1}
(1,1,2,?) (1,2,1,?) (1,2,2,?) (2,1,1,?) (2,1,2,?) (2,2,1,?)
4 7 9 13 15 18
(1,1,2,2) (1,2,1,2) (1,2,2,1) (2,1,1,2) (2,1,2,1) (2,2,1,1)
Рис.2.14. Схема получения всех перестановок с повторениями
по алгоритму 2.6
