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