
- •Оглавление
- •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.13. О неэффективности полнопереборных алгоритмов. Пример
Полнопереборные алгоритмы решения задач выбора с использованием алгоритмов порождения комбинаторных объектов являются универсальными, достаточно простыми для проектирования и программирования, но время их выполнения может быть очень велико даже при небольших размерностях задачи (количестве исходных данных), причём
настолько велико (может составлять годы или даже века), что о возмож-
ности их практического применения не может быть и речи. Поэтому, при проектировании таких алгоритмов, обязательно нужно теоретически оценивать время их работы на конкретных данных.
Для решения некоторых задач выбора можно построить уникальные, “быстрые” алгоритмы, позволяющие быстро получить решение даже при больших размерностях задачи. Покажем это на примере.
Рассмотрим задачу выбора, полнопереборный алгоритм её решения и более эффективный алгоритм.
Задача. Имеется n деталей. Каждая деталь должна быть обработана сначала на станке A, затем на станке B. Время обработки ai каждой детали на станке A задано в последовательности (a1,a2,…,an), а на станке B - в последовательности (b1,b2,…,bn). Требуется определить такую последовательность обработки деталей, при которой время обработки всех деталей минимально.
Решение. Определим алгоритм вычисления времени обработки всех деталей при заданной последовательности обработки деталей.
Пусть aki-1 – время окончания обработки i-1-ой детали на станке A. Следующую i-ую деталь можно начать обрабатывать на станке A в это же время и время окончания обработки i-ой детали на cтанке A будет aki=aki-1+ai.
Пусть bki-1 – время окончания обработки i-1-ой детали на станке B. Если это время больше времени aki (рис.2.28,а) окончания обработки i-ой детали на cтанке A, то в это же время bki-1 можно начать обрабатывать i-ую деталь на станке B и время окончания обработки i-ой детали на cтанке B будет bki=bki-1+bi. Если же время bki-1 окончания i-1-ой детали на станке B меньше aki (рис.2.28,б), то начать обработку i-ой детали на станке B можно только в aki, а закончить – в bki=aki-1+bi.
Станок A i-1-я деталь aki-1 i-я деталь aki=aki-1+ai
С танок B i-1-я деталь bki-1 i-я деталь bki=bki-1+bi
а) bki-1>aki
Станок A i-1-я деталь aki-1 i-я деталь aki=aki-1+ai
С танок B i-1-я деталь bki-1 i-я деталь bki=aki-1+bi
простой
б) bki-1<aki
Рис.2.28. Определение времени окончания обработки i-й детали
на станках A и B
Исходя из этого получаем простой алгоритм вычисления времени обработки последовательности деталей, представленный блок-схемой на рис.2.29, которое совпадает с окончанием обработки последней детали на станке B.
ak:=0; bk:=0
ak:=
ak+ai
+
bk:=bk+bi
bk:=ak+bi
Рис.2.29. Алгоритм вычисления времени обработки
последовательности деталей
Естественно, это время зависит от порядка обработки деталей. Например, если рассматривать данные, приведённые в табл. 2.3, то время обработки последовательности деталей (1,2,3,4,5,6,7) будет 120. Времена окончания обработки каждой детали на станках A и B для этой последовательности представлены в табл. 2.4.
Таблица 2.3