Ppi1sumwu — различия между версиями
Анна (обсуждение | вклад) (→Описание алгоритма) |
Анна (обсуждение | вклад) (→Описание алгоритма) |
||
| Строка 5: | Строка 5: | ||
}} | }} | ||
== Описание алгоритма == | == Описание алгоритма == | ||
| + | === Идея === | ||
Оптимальное расписание для этой задачи будем задавать множеством работ <tex>S</tex>, которые будут выполнены в срок. Работы, которые не войдут в <tex>S</tex>, то есть завершатся с опозданием, могут быть выполнены в конце в любом порядке.<br> | Оптимальное расписание для этой задачи будем задавать множеством работ <tex>S</tex>, которые будут выполнены в срок. Работы, которые не войдут в <tex>S</tex>, то есть завершатся с опозданием, могут быть выполнены в конце в любом порядке.<br> | ||
Чтобы построить множество <tex>S</tex>, будем добавлять работы в порядке неуменьшения их времен окончания, и как только некоторая работа <tex>j</tex> опаздывает, удалим из <tex>S</tex> работу с минимальным значением <tex>w_i</tex> и поставим <tex>j</tex> на ее место.<br> | Чтобы построить множество <tex>S</tex>, будем добавлять работы в порядке неуменьшения их времен окончания, и как только некоторая работа <tex>j</tex> опаздывает, удалим из <tex>S</tex> работу с минимальным значением <tex>w_i</tex> и поставим <tex>j</tex> на ее место.<br> | ||
| + | === Псевдокод === | ||
Пусть есть работы <tex>1 \ldots n</tex> с временами окончания <tex>d_1 \leqslant d_2 \leqslant \ldots \leqslant d_n</tex>. Будем называть ''простоем '' временной интервал, в который на машине ничего не обрабатывается. Тогда следующий алгоритм вычислит оптимальное множество <tex>S</tex>. | Пусть есть работы <tex>1 \ldots n</tex> с временами окончания <tex>d_1 \leqslant d_2 \leqslant \ldots \leqslant d_n</tex>. Будем называть ''простоем '' временной интервал, в который на машине ничего не обрабатывается. Тогда следующий алгоритм вычислит оптимальное множество <tex>S</tex>. | ||
| Строка 18: | Строка 20: | ||
добавить <tex>i</tex> в <tex>S</tex> и поставить <tex>i</tex> на место самого раннего простоя | добавить <tex>i</tex> в <tex>S</tex> и поставить <tex>i</tex> на место самого раннего простоя | ||
Таким образом, работы, не попавшие в <tex>S</tex>, будут иметь минимальное значение <tex>w_i</tex>. | Таким образом, работы, не попавшие в <tex>S</tex>, будут иметь минимальное значение <tex>w_i</tex>. | ||
| + | === Асимптотика === | ||
| + | Данный алгоритм может быть реализован за время <tex>O(nlogn)</tex>. | ||
== Доказательство корректности == | == Доказательство корректности == | ||
Версия 09:12, 7 мая 2016
| Задача: |
| Дано одинаковых станков, на которых нужно выполнить работ. Любая работа на любом станке выполняется единицу времени. Для каждой работы есть время окончания — ожидается, что до этого времени она будет закончена, и штраф , который нужно будет выплатить в случае, если работа была закончена после . Необходимо минимизировать суммарный штраф, который придется выплатить. |
Содержание
Описание алгоритма
Идея
Оптимальное расписание для этой задачи будем задавать множеством работ , которые будут выполнены в срок. Работы, которые не войдут в , то есть завершатся с опозданием, могут быть выполнены в конце в любом порядке.
Чтобы построить множество , будем добавлять работы в порядке неуменьшения их времен окончания, и как только некоторая работа опаздывает, удалим из работу с минимальным значением и поставим на ее место.
Псевдокод
Пусть есть работы с временами окончания . Будем называть простоем временной интервал, в который на машине ничего не обрабатывается. Тогда следующий алгоритм вычислит оптимальное множество .
for to if опаздывает, и все более ранние простои заполнены найти if заменить на в else добавить в и поставить на место самого раннего простоя
Таким образом, работы, не попавшие в , будут иметь минимальное значение .
Асимптотика
Данный алгоритм может быть реализован за время .
Доказательство корректности
| Теорема: |
Вышеописанный алгоритм корректен и строит оптимальное множество работ . |
| Доказательство: |
|
Пусть — множество работ, вычисленное с помощью алгоритма. Тогда все работы, находящиеся в этом множестве, будут выполнены в срок, то есть штраф за них налагаться не будет, так как если работа заменила работу , которая успевала выполниться до истечения , то так же успеет выполниться в срок, потому что .
Покажем, что в работа может быть заменена работой без увеличения значения целевой функции. Рассмотрим два случая: Будем говорить превосходит , где , если . Тогда , так как когда мы вставляли работу мы выбрали для замены , то есть ее вес был минимальным среди всех работ, находившихся на тот момент в , включая . Для большей ясности на рисунке 1 показано, в каком порядке располагаются эти работы относительно друг друга согласно их номерам.
то , что доказывает теорему. |
См. также
Источники информации
- Peter Brucker «Scheduling Algorithms», fifth edition, Springer — с. 119-120 ISBN 978-3-540-69515-8