F2Cmax
Постановка задачи
Рассмотрим задачу:
- Дано работ и станка.
- Для каждой работы известно её время выполнения на каждом станке.
- Каждую работу необходимо выполнить сначала на первом станке, а потом на втором.
Требуется минимизировать время окончания всех работ.
Описание алгоритма
Пусть
- Будем в ходе нашего алгоритма строить два списка и . Изначально оба списка пусты. И будем поддерживать множество еще не распределенных по спискам и работ
- Пока множество
- Находим такие индексы и , что
- Если минимум достигается на первом станке (иными словами ), то поставим работу в конец листа , иначе ставим в начало листа
- Удаляем работу из множества
непусто будем распределять работы по спискам следующим образом:
- Рассмотрим лист . Утверждается, что этот лист является оптимальной перестановкой работ как на первом, так и на втором станке. Далее расставляем подряд работы на первом станке согласно перестановке, после чего ставим в том же порядке работы на втором стане, при этом избегая одновременного выполнения одной и той же работы.
Доказательство корректности алгоритма
Псевдокод
while Найти и , где if j = 1 else Расставляем работы на первом станке согласно перестановке Расставляем работы на втором станке согласно перестановке и времени начала соответсвующей работы на первом станке.
Сложность алгоритма
Источники
- Peter Brucker. «Scheduling Algorithms» — «Springer», 2006 г. — 175 стр. — ISBN 978-3-540-69515-8