Обсуждение участницы:Анна — различия между версиями
Анна (обсуждение | вклад) (→Доказательство корректности) |
Анна (обсуждение | вклад) |
||
| Строка 38: | Строка 38: | ||
Если из последовательности <tex>i_0 < i_1 < \cdots < i_r</tex> можно выделить подпоследовательность <tex>j_0 = i_0 < j_1 < \cdots < j_s</tex> со свойствами: | Если из последовательности <tex>i_0 < i_1 < \cdots < i_r</tex> можно выделить подпоследовательность <tex>j_0 = i_0 < j_1 < \cdots < j_s</tex> со свойствами: | ||
* <tex>j_{v + 1}</tex> превосходит <tex>j_v</tex>, где <tex>v \in [0 \cdots s - 1]</tex> | * <tex>j_{v + 1}</tex> превосходит <tex>j_v</tex>, где <tex>v \in [0 \cdots s - 1]</tex> | ||
| − | * <tex>j_{s - 1} < l \leq j_s</tex>, | + | * <tex>j_{s - 1} < l \leq j_s</tex> , |
| − | то <tex>w_l \geq w_{k_{j_s}} \geq \cdots \geq w_{k_{j_0}} = w_k</tex>,что доказывает терему.<br> | + | то <tex>w_l \geq w_{k_{j_s}} \geq \cdots \geq w_{k_{j_0}} = w_k</tex>, что доказывает терему.<br> |
}} | }} | ||
Версия 20:21, 5 мая 2016
| Задача: |
| Дано одинаковых станков, на которых нужно выполнить работ. Любая работа на любом станке выполняется единицу времени. Для каждой работы есть время окончания — ожидается, что до этого времени она будет закончена, и штраф , который нужно будет выплатить в случае, если работа была закончена после . Необходимо минимизировать суммарный штраф, который придется выплатить. |
Описание алгоритма
Оптимальное расписание для этой задачи будем задавать множеством работ , которые будут выполнены в начале, как после будет показано, именно за эти работы штраф начислен не будет. Работы, которые не войдут в , то есть завершатся с опозданием, могут быть выполнены в конце в любом порядке.
Чтобы построить множество , будем добавлять работы в порядке неуменьшения их времен окончания, и как только некоторая работа опаздывает, удалим из работу с минимальным значением и поставим на ее место.
Пусть есть работы с временами окончания . Будем называть простоем временной интервал, в который на машине ничего не обрабатывается. Тогда следующий алгоритм вычислит оптимальное множество .
for to : if опаздывает, и все более ранние простои заполнены: найти if : заменить на в else: добавить в и поставить на место самого раннего простоя
Таким образом, работы, не попавшие в , будут иметь минимальное значение .
Доказательство корректности
| Теорема: |
Вышеописанный алгоритм корректен и строит оптимальное множество работ . |
| Доказательство: |
|
Пусть — множество работ, вычисленное с помощью алгоритма. Тогда все работы, находящиеся в этом множестве, будут выполнены в срок, то есть штраф за них налагаться не будет, так как если работа заменила работу , которая успевала выполниться до истечения , то так же успеет выполниться в срок, потому что .
Покажем, что в работа может быть заменена работой без увеличения значения целевой функции. Рассмотрим два случая: Будем говорить превосходит , где , если . Тогда , так как когда мы вставляли работу мы выбрали для замены , то есть ее вес был минимальным среди всех работ, находившихся на тот момент в , включая . Для большей ясности на рисунке 1 показано, в каком порядке располагаются эти работы относительно друг друга согласно их номерам.
|