Ppi1sumwu — различия между версиями
Анна (обсуждение | вклад) (→Доказательство корректности) |
Анна (обсуждение | вклад) (→Доказательство корректности) |
||
Строка 38: | Строка 38: | ||
# Пусть <tex>l > k</tex>.<br> | # Пусть <tex>l > k</tex>.<br> | ||
#:Замена работы <tex>k</tex> в <tex>S^*</tex> на работу <tex>l</tex> не противоречит условию, что за все работы в этом множестве штраф налагаться не будет, так как <tex>k</tex> выполнялась в срок, а <tex>d_k \leqslant d_l</tex> и все работы выполняются одинаковое количество времени. Следовательно, <tex>l</tex> так же будет выполнена в срок. Осталось доказать, что <tex>w_k \leqslant w_l</tex>. <br> | #:Замена работы <tex>k</tex> в <tex>S^*</tex> на работу <tex>l</tex> не противоречит условию, что за все работы в этом множестве штраф налагаться не будет, так как <tex>k</tex> выполнялась в срок, а <tex>d_k \leqslant d_l</tex> и все работы выполняются одинаковое количество времени. Следовательно, <tex>l</tex> так же будет выполнена в срок. Осталось доказать, что <tex>w_k \leqslant w_l</tex>. <br> | ||
− | |||
#:Пусть работа <tex>k_{i_0} = k</tex> была заменена работой <tex>i_0</tex>, а так же <tex>k_{i_1} \ldots k_{i_r}</tex> {{---}} последовательность работ из <tex>S</tex>, каждая из которых была на некотором шаге заменена работой <tex>i_1 \ldots i_r</tex> соответственно. Тогда <tex>i_0 < i_1 < \ldots < i_r</tex>.<br> | #:Пусть работа <tex>k_{i_0} = k</tex> была заменена работой <tex>i_0</tex>, а так же <tex>k_{i_1} \ldots k_{i_r}</tex> {{---}} последовательность работ из <tex>S</tex>, каждая из которых была на некотором шаге заменена работой <tex>i_1 \ldots i_r</tex> соответственно. Тогда <tex>i_0 < i_1 < \ldots < i_r</tex>.<br> | ||
+ | #:[[Файл:Sh.jpg|370px|thumb|right|Рис. 1. <tex>i_v</tex> превосходит <tex>i_u</tex>.]] | ||
#:Будем говорить <tex>i_v</tex> ''превосходит'' <tex>i_u</tex>, где <tex>u < v</tex>, если <tex>k_{i_v} \leqslant i_u</tex>. Тогда <tex>w_{k_{i_v}} \geqslant w_{k_{i_u}}</tex>, так как когда мы вставляли работу <tex>i_u</tex> мы выбрали для замены <tex>k_{i_u}</tex>, то есть ее вес был минимальным среди всех работ, находившихся на тот момент в <tex>S</tex>, включая <tex>k_{i_v}</tex>. Для большей ясности на рисунке 1 показано, в каком порядке располагаются эти работы относительно друг друга согласно их номерам.<br> | #:Будем говорить <tex>i_v</tex> ''превосходит'' <tex>i_u</tex>, где <tex>u < v</tex>, если <tex>k_{i_v} \leqslant i_u</tex>. Тогда <tex>w_{k_{i_v}} \geqslant w_{k_{i_u}}</tex>, так как когда мы вставляли работу <tex>i_u</tex> мы выбрали для замены <tex>k_{i_u}</tex>, то есть ее вес был минимальным среди всех работ, находившихся на тот момент в <tex>S</tex>, включая <tex>k_{i_v}</tex>. Для большей ясности на рисунке 1 показано, в каком порядке располагаются эти работы относительно друг друга согласно их номерам.<br> | ||
#:Если из последовательности <tex>i_0 < i_1 < \ldots < i_r</tex> можно выделить подпоследовательность <tex>j_0 = i_0 < j_1 < \ldots < j_s</tex> со свойствами: | #:Если из последовательности <tex>i_0 < i_1 < \ldots < i_r</tex> можно выделить подпоследовательность <tex>j_0 = i_0 < j_1 < \ldots < j_s</tex> со свойствами: |
Версия 09:46, 7 мая 2016
Задача: |
Дано | одинаковых станков, на которых нужно выполнить работ. Любая работа на любом станке выполняется единицу времени. Для каждой работы есть время окончания — ожидается, что до этого времени она будет закончена, и штраф , который нужно будет выплатить в случае, если работа была закончена после . Необходимо минимизировать суммарный штраф, который придется выплатить.
Содержание
Описание алгоритма
Идея
Оптимальное расписание для этой задачи будем задавать множеством работ
Чтобы построить множество , будем добавлять работы в порядке неуменьшения их времен окончания, и как только некоторая работа опаздывает, удалим из работу с минимальным значением и поставим на ее место.
Псевдокод
Пусть есть работы
с временами окончания . Будем называть простоем временной интервал, в который на машине ничего не обрабатывается. Тогда следующий алгоритм вычислит оптимальное множество .for to if опаздывает, и все более ранние простои заполнены найти if заменить на в else добавить в и поставить на место самого раннего простоя
Таким образом, работы, не попавшие в
, будут иметь минимальное значение .Асимптотика
Данный алгоритм может быть реализован за время
.Доказательство корректности
Теорема: |
Вышеописанный алгоритм корректен и строит оптимальное множество работ . |
Доказательство: |
Пусть
Покажем, что в
|
См. также
Источники информации
- Peter Brucker «Scheduling Algorithms», fifth edition, Springer — с. 119-120 ISBN 978-3-540-69515-8