
- •Оглавление
- •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
- •Задачи выбора
- •Цель занятия: приобретение практических навыков в использовании алгоритмов порождения комбинаторных объектов при проектировании алгоритмов решения задач выбора.
- •Задания
- •Варианты заданий
- •Контрольные вопросы
- •Библиографический список
Времена окончания обработки деталей на станках a и b
Шаг обработки |
Номер детали |
Станок А |
Станок В |
1 |
4 |
6 |
16 |
2 |
3 |
14 |
28 |
3 |
2 |
30 |
48 |
4 |
1 |
50 |
71 |
5 |
7 |
64 |
89 |
6 |
5 |
78 |
99 |
7 |
6 |
98 |
107 |
Практическое занятие 2.1 Алгоритмы порождения комбинаторных объектов
Цель занятия: изучить основные комбинаторные объекты, алгоритмы их порождения, программно реализовать и оценить временную сложность алгоритмов.
Задания
1. Реализовать алгоритм порождения подмножеств.
2. Построить график зависимости количества всех подмножеств от мощности множества.
3. Построить графики зависимости времени выполнения алгоритмов п.1 на вашей ЭВМ от мощности множества.
4. Определить максимальную мощность множества, для которого можно получить все подмножества не более чем за час, сутки, месяц, год на вашей ЭВМ.
5. Определить максимальную мощность множества, для которого можно получить все подмножества не более чем за час, сутки, месяц, год на ЭВМ, в 10 и в 100 раз быстрее вашей.
6. Реализовать алгоритм порождения сочетаний.
7. Построить графики зависимости количества всех сочетаний из n по k от k при n=(5, 7, 9).
8. Реализовать алгоритм порождения перестановок.
9. Построить график зависимости количества всех перестановок от мощности множества.
10. Построить графики зависимости времени выполнения алгоритма п.8 на вашей ЭВМ от мощности множества.
11. Определить максимальную мощность множества, для которого можно получить все перестановки не более чем за час, сутки, месяц, год на вашей ЭВМ.
12. Определить максимальную мощность множества, для которого можно получить все перестановки не более чем за час, сутки, месяц, год на ЭВМ, в 10 и в 100 раз быстрее вашей.
13. Реализовать алгоритм порождения размещений.
14. Построить графики зависимости количества всех размещений из n по k от k при n=(5, 7, 9).
Практическое занятие 2.2 Разбиения множеств
Цель занятия: изучить различные разбиения множеств, алгоритмы их порождения, программно реализовать и оценить временную сложность алгоритмов.
Задания
1. Реализовать алгоритм порождения всех упорядоченных разбиений n-элементного множества на k подмножеств.
2. Написать программу, формирующую таблицу Т (табл. 2.7), в которой строки соответствуют количеству n элементов в множестве, а столбцы – количеству k подмножеств в разбиении. Клетка таблицы Тn,k при k≤n должна содержать количество всех упорядоченных разбиений n-элементного множества на k подмножеств, а при k>n клетка таблицы Тn,k не заполняется.
Таблица 2.7
Количество упорядоченных разбиений
n-элементного множества на k подмножеств
|
количество k подмножеств в разбиении |
|||||
1 |
2 |
3 |
. . . . . |
N |
||
мощность n множества |
1 |
|
|
|
|
|
2 |
|
|
|
|
|
|
3 |
|
|
|
|
|
|
: : |
|
|
|
|
|
|
n |
|
|
|
|
|
3. Реализовать алгоритм порождения всех упорядоченных разбиений n-элементного множества.
4. Написать программу, вычисляющую количество всех упорядоченных разбиений n-элементного множества. Результат представить в виде таблицы (табл. 2.8 ).
5. Реализовать алгоритм порождения всех разбиений n-элементного множества на k подмножеств.
6. Написать программу, формирующую таблицу Т (табл. 2.9), в которой строки соответствуют количеству n элементов в множестве, а столбцы – количеству k подмножеств в разбиении. Клетка таблицы Тn,k
при k≤n должна содержать количество всех разбиений n-элементного множества на k подмножеств, а при k>n клетка таблицы Тn,k не заполняется.
Таблица 2.8
Количество упорядоченных разбиений
Мощность множества |
Количество упорядоченных разбиений |
1 |
|
2 |
|
3 |
|
: : |
|
n |
|
Таблица 2.9
Количество разбиений n-элементного множества на k подмножеств
|
количество k подмножеств в разбиении |
|||||
1 |
2 |
3 |
. . . . . |
N |
||
мощность n множества |
1 |
|
|
|
|
|
2 |
|
|
|
|
|
|
3 |
|
|
|
|
|
|
: : |
|
|
|
|
|
|
n |
|
|
|
|
|
7. Реализовать алгоритм порождения всех разбиений n-элементного множества.
8. Написать программу, вычисляющую количество всех разбиений n-элементного множества. Результат представить в виде таблицы (табл. 2.10).
Таблица 2.10
Количество упорядоченных разбиений
Мощность множества |
Количество разбиений |
1 |
|
2 |
|
3 |
|
: : |
|
n |
|