Обсуждение участницы:Анна — различия между версиями
Анна (обсуждение | вклад) (→Доказательство корректности) |
Анна (обсуждение | вклад) (→Доказательство корректности) |
||
Строка 40: | Строка 40: | ||
* <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> | ||
− | + | В противном случае найдем такую работу <tex>i_t</tex> с наименьшим <tex>t</tex>, что никакая работа <tex>i_v</tex>, где <tex>v > t</tex>, не превосходит <tex>i_t</tex>, причем <tex>i_t < l</tex>. По определению это значит, что после того, как работа <tex>i_t</tex> будет добавлена в <tex>S</tex>, ни одна работа <tex>i \leq i_t</tex> не будет удалена из этого множества. Так как <tex>i_t < l</tex>, то по определению <tex>l</tex> все работы, которые на момент добавления <tex>i_t</tex> находятся в <tex>S</tex>, так же должны принадлежать <tex>S^*</tex>. |
Версия 08:13, 6 мая 2016
Задача: |
Дано | одинаковых станков, на которых нужно выполнить работ. Любая работа на любом станке выполняется единицу времени. Для каждой работы есть время окончания — ожидается, что до этого времени она будет закончена, и штраф , который нужно будет выплатить в случае, если работа была закончена после . Необходимо минимизировать суммарный штраф, который придется выплатить.
Описание алгоритма
Оптимальное расписание для этой задачи будем задавать множеством работ
Чтобы построить множество , будем добавлять работы в порядке неуменьшения их времен окончания, и как только некоторая работа опаздывает, удалим из работу с минимальным значением и поставим на ее место.
Пусть есть работы с временами окончания . Будем называть простоем временной интервал, в который на машине ничего не обрабатывается. Тогда следующий алгоритм вычислит оптимальное множество .
for to : if опаздывает, и все более ранние простои заполнены: найти if : заменить на в else: добавить в и поставить на место самого раннего простоя
Таким образом, работы, не попавшие в
, будут иметь минимальное значение .Доказательство корректности
{{Теорема
|statement=
Вышеописанный алгоритм корректен и строит оптимальное множество работ
Пусть — множество работ без штрафов в оптимальном расписании.
Определим работы и следующим образом:
- — первая работа в :
- — первая работа в :
Покажем, что в
1. Пусть .
То, что не принадлежит множеству , значит, что либо на некотором шаге появилась опаздывающая работа , которая заменила , либо работа опаздывала и было меньше , и поэтому она не была добавлена. В любом случае в это время работа уже принадлежала . Во втором случае очевидно, что . То же неравенство выполняется и в первом случае, так как на этапе замены мы выбрали , а не . Следовательно, мы не ухудшим целевую функцию заменой на .
2. Пусть .
Замена работы в на работу не противоречит условию, что за все работы в этом множестве штраф налагаться не будет, так как выполнялась в срок, а и все работы выполняются одинаковое количество времени. Следовательно, так же будет выполнена в срок. Осталось доказать, что .
Пусть работа была заменена работой , а так же — последовательность работ из , каждая из которых была на некотором шаге заменена работой соответственно. Тогда .
Будем говорить
Если из последовательности можно выделить подпоследовательность со свойствами:
- превосходит , где
- ,
то
В противном случае найдем такую работу с наименьшим , что никакая работа , где , не превосходит , причем . По определению это значит, что после того, как работа будет добавлена в , ни одна работа не будет удалена из этого множества. Так как , то по определению все работы, которые на момент добавления находятся в , так же должны принадлежать .