Обсуждение участницы:Анна
| Задача: |
| Дано одинаковых станков, на которых нужно выполнить работ. Любая работа на любом станке выполняется единицу времени. Для каждой работы есть время окончания — ожидается, что до этого времени она будет закончена, и штраф , который нужно будет выплатить в случае, если работа была закончена после . Необходимо минимизировать суммарный штраф, который придется выплатить. |
Описание алгоритма
Оптимальное расписание для этой задачи будем задавать множеством работ , которые будут выполнены в начале, как после будет показано, именно за эти работы штраф начислен не будет. Работы, которые не войдут в , то есть завершатся с опозданием, могут быть выполнены в конце в любом порядке.
Чтобы построить множество , будем добавлять работы в порядке неуменьшения их времен окончания, и как только некоторая работа опаздывает, удалим из работу с минимальным значением и поставим на ее место.
Пусть есть работы с временами окончания . Будем называть простоем временной интервал, в который на машине ничего не обрабатывается. Тогда следующий алгоритм вычислит оптимальное множество .
for to : if опаздывает, и все более ранние простои заполнены: найти if : заменить на в else: добавить в и поставить на место самого раннего простоя
Таким образом, работы, не попавшие в , будут иметь минимальное значение .
Доказательство корректности
{{Теорема
|statement=
Вышеописанный алгоритм корректен и строит оптимальное множество работ .
|proof=
Пусть — множество работ, вычисленное с помощью алгоритма. Тогда все работы, находящиеся в этом множестве, будут выполнены в срок, то есть штраф за них налагаться не будет, так как если работа заменила работу , которая успевала выполниться до истечения , то так же успеет выполниться в срок, потому что .
Пусть — множество работ без штрафов в оптимальном расписании.
Определим работы и следующим образом:
- — первая работа в :
- — первая работа в :
Покажем, что в работа может быть заменена работой без увеличения значения целевой функции. Рассмотрим два случая:
1. Пусть .
То, что не принадлежит множеству , значит, что либо на некотором шаге появилась опаздывающая работа , которая заменила , либо работа опаздывала и было меньше , и поэтому она не была добавлена. В любом случае в это время работа уже принадлежала . Во втором случае очевидно, что . То же неравенство выполняется и в первом случае, так как на этапе замены мы выбрали , а не . Следовательно, мы не ухудшим целевую функцию заменой на .
2. Пусть .
Замена работы в на работу не противоречит условию, что за все работы в этом множестве штраф налагаться не будет, так как выполнялась в срок, а и все работы выполняются одинаковое количество времени. Следовательно, так же будет выполнена в срок. Осталось доказать, что .
Пусть работа была заменена работой , а так же — последовательность работ из , каждая из которых была на некотором шаге заменена работой соответственно. Тогда .
Будем говорить превосходит , где , если . Тогда , так как когда мы вставляли работу мы выбрали для замены , то есть ее вес был минимальным среди всех работ, находившихся на тот момент в , включая . Для большей ясности на рисунке 1 показано, в каком порядке располагаются эти работы относительно друг друга согласно их номерам.
Если из последовательности можно выделить подпоследовательность со свойствами:
- превосходит , где
- ,
то , что доказывает теорему.
В противном случае найдем такую работу с наименьшим , что никакая работа , где , не превосходит , причем . По определению это значит, что после того, как работа будет добавлена в , ни одна работа не будет удалена из этого множества. Так как , то по определению все работы, которые на момент добавления находятся в , так же должны принадлежать .