F2Cmax — различия между версиями
GR1n (обсуждение | вклад) (→Описание алгоритма) |
GR1n (обсуждение | вклад) (→Псевдокод) |
||
Строка 26: | Строка 26: | ||
==Псевдокод== | ==Псевдокод== | ||
+ | <tex>L \leftarrow \varnothing </tex> | ||
+ | <tex>R \leftarrow \varnothing </tex> | ||
+ | <tex>X \leftarrow \{1, \dots, n\}</tex> | ||
+ | while <tex> X \neq \varnothing</tex> | ||
+ | Найти <tex> i </tex> и <tex> j </tex>, где <tex>p_{ij} = \min \{ p_{ij} \mid i \in X; j = 1, 2\}</tex> | ||
+ | if j = 1 | ||
+ | <tex>L \leftarrow L \circ i </tex> | ||
+ | else | ||
+ | <tex>R \leftarrow i \circ R </tex> | ||
+ | <tex>X \leftarrow X \setminus \{i\} </tex> | ||
+ | <tex>T \leftarrow L \circ R</tex> | ||
+ | |||
+ | Расставляем работы на первом станке согласно перестановке <tex> T </tex> | ||
+ | |||
+ | Расставляем работы на втором станке согласно перестановке <tex> T </tex> | ||
+ | и времени начала соответсвующей работы на первом станке. | ||
==Сложность алгоритма== | ==Сложность алгоритма== |
Версия 18:57, 10 июня 2013
Содержание
Постановка задачи
Рассмотрим задачу:
- Дано работ и станка.
- Для каждой работы известно её время выполнения на каждом станке.
- Каждую работу необходимо выполнить сначала на первом станке, а потом на втором.
Требуется минимизировать время окончания всех работ.
Описание алгоритма
Пусть
- Будем в ходе нашего алгоритма строить два списка и . Изначально оба списка пусты. И будем поддерживать множество еще не распределенных по спискам и работ
- Пока множество
- Находим такие индексы и , что
- Если минимум достигается на первом станке (иными словами ), то поставим работу в конец листа , иначе ставим в начало листа
- Удаляем работу из множества
непусто будем распределять работы по спискам следующим образом:
- Рассмотрим лист . Утверждается, что этот лист является оптимальной перестановкой работ как на первом, так и на втором станке. Далее расставляем подряд работы на первом станке согласно перестановке, после чего ставим в том же порядке работы на втором стане, при этом избегая одновременного выполнения одной и той же работы.
Доказательство корректности алгоритма
Псевдокод
while Найти и , где if j = 1 else Расставляем работы на первом станке согласно перестановке Расставляем работы на втором станке согласно перестановке и времени начала соответсвующей работы на первом станке.
Сложность алгоритма
Источники
- Peter Brucker. «Scheduling Algorithms» — «Springer», 2006 г. — 175 стр. — ISBN 978-3-540-69515-8