
- •Оглавление
- •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.4. Перестановки
Перестановкой называется расположенные в определенном порядке элементы множества М.
Теорема 2.2. Количество всех различных перестановок n-элемент-ного множества М (количество способов упорядочивания множества) определяется формулой Рn=n!.
Доказательство. Перестановку можно представить последовательностью из n мест. Для того чтобы получить одну перестановку, нужно выполнить одно за другим n действий: заполнить 1-ое место в последовательности, 2-ое место и так до n-го места. Для выполнения 1-го действия (заполнения 1-го места) можно взять любой элемент из множества М и поставить его на 1-ое место, т.е. его можно выполнить n-способами, и после этого в множестве М останется n-1 элемент. Для выполнения 2-го действия (заполнения 2-го места) можно взять любой элемент из оставшихся в множестве М и поставить его на 2-ое место, т.е. его можно выполнить n-1-способами, и после этого в множестве М останется n-2 элемента и т.д. По правилу произведения все n действий могут быть выполнены n(n-1)(n-2)...21=n! способами, следовательно, количество всех различных перестановок n-элементного множества равно n!.
Получить все перестановки n-элементного множества М можно, используя метод поиска с возвращением, выполняя действия, описанные в доказательстве теоремы 2.2. Формирование i-го элемента перестановки опишем рекурсивным алгоритмом 2.2, блок-схема которого представлена на рис.2.5. В цикле перебираются элементы множества М, которые можно поставить на i-ое место. Если заполнено последнее место, то перестановка сформирована и выводим её, иначе заполняем следующее i+1-ое место по алгоритму 2.2 элементами множества М, за исключением элемента, поставленного на i-ое место.
Алгоритм 2.2 порождения перестановок n-элементного множества.
Вход: М–множество, элементы которого можно поставить на i-ое место;
i–заполняемое место в последовательности Р.
Выход: последовательность всех перестановок n-элементного множества.
Глобальные параметры: Р – формируемая перестановка;
n – мощность множества.
Рi
:=
x
+
Перестановка(М-{x},i+1)
Рис.2.5. Рекурсивный алгоритм порождения перестановок
n-элементного множества
Пусть задано множество {1,2,3} и требуется получить все его перестановки. Схема получения всех перестановок по алгоритму 2.2 представлена на рис.2.6. В этой схеме представлены формируемые перестановки и множества, элементы которых можно поставить на очередное место в перестановке. В исходной ситуации все места перестановки неопределенны и любой элемент множества {1,2,3} можно поставить на первое место. В схеме к стрелкам приписаны номера действий. В результате выполнения действия 1 на первое место перестановки устанавливается элемент 1, а на второе место после этого можно поставить любой элемент множества {2,3}. После выполнения действия 2 на второе место перестановки устанавливается элемент 2, а на третье место после этого можно поставить только элемент множества {3} (действие 3) и первая перестановка (1,2,3) сформирована. Затем выполняются два шага назад и действие 4, ставящее элемент 3 из множества {2,3} на второе место. Далее действие 5 ставит оставшийся элемент 2 на третье место и вторая перестановка (1,3,2) сформирована. Аналогичным образом формируются все остальные перестановки. Действия 1, 6 и 11 заполняют первое место перестановки, действия 2, 4, 7, 9, 12 и 14 – второе место, действия 3, 5, 8, 10, 13 и 15 – третье место.
множество множество
{3} 3
перестановка
перестановка
(1,2,?) (1,2,3)
2
множество
{2,3}
перестановка
(1,?,?)
4
множество множество
{1} 5
перестановка перестановка
(2,3,?) (2,3,1)
1
множество множество
{3} 8
перестановка перестановка
(2,1,?) (2,1,3)
7
множество множество
{1,2,3} 6 {1,3}
п ерестановка перестановка
(?,?,?) (2,?,?)
9
множество множество
{1} 10
перестановка перестановка
(2,3,?) (2,3,1)
11
множество множество
{2} 13
перестановка перестановка
(3,1,?) (3,1,2)
12
множество
{1,2}
перестановка
(3,?,?)
14
множество множество
{1} 15
перестановка перестановка
(3,2,?) (3,2,1)
Рис.2.6. Схема получения всех перестановок по алгоритму 2.2