577
правок
Изменения
Нет описания правки
== Описание алгоритма ==
=== Идея ===
Оптимальное расписание для этой задачи будем задавать множеством работ <tex>S</tex>, которые будут выполнены в срок. Работы, которые не войдут в <tex>S</tex>, то есть завершатся с опозданием, могут быть выполнены в конце в любом порядке.<br>Чтобы построить множество <tex>S</tex>, будем добавлять работы в порядке неуменьшения их времен окончания, и как только некоторая работа <tex>j</tex> опаздывает, удалим из <tex>S</tex> работу <tex>i</tex> с минимальным значением <tex>w_i</tex> и поставим <tex>j</tex> на ее место.<br>
=== Псевдокод ===
|proof=
Пусть <tex>S</tex> {{---}} множество работ, вычисленное с помощью алгоритма. Тогда все работы, находящиеся в этом множестве, будут выполнены в срок, то есть штраф за них налагаться не будет, так как если работа <tex>j</tex> заменила работу <tex>i</tex>, которая успевала выполниться до истечения <tex>d_i</tex>, то <tex>j</tex> так же успеет выполниться в срок, потому что <tex>d_i \leqslant d_j</tex>.<br>
Пусть <tex>S^*</tex> {{---}} множество работ без штрафов в оптимальном расписании.<br>Определим работы <tex>l</tex> и <tex>k</tex> следующим образом:
* <tex>l</tex> {{---}} первая работа в <tex>S</tex>: <tex>l \notin S^*</tex>
* <tex>k</tex> {{---}} первая работа в <tex>S^*</tex>: <tex>k \notin S</tex>