1ripipsumwu — различия между версиями
Pokrasko (обсуждение | вклад) |
Pokrasko (обсуждение | вклад) (→Корректность алгоритма) |
||
Строка 66: | Строка 66: | ||
# <tex>\max \{W_{k - 1} (s, e), W'_k (s, e)\} \leqslant W^*_k (s, e)</tex> | # <tex>\max \{W_{k - 1} (s, e), W'_k (s, e)\} \leqslant W^*_k (s, e)</tex> | ||
#: Так как <tex>U_{k - 1} (s, e) \subseteq U_k (s, e)</tex>, то <tex>W_{k - 1} (s, e) = W^*_{k - 1} (s, e) \leqslant W^*_k (s, e)</tex>. Кроме того, если <tex>W'_k (s, e) > 0</tex>, то существует такое время <tex>s' \mid \max \{r_k, s + p\} \leqslant s' \leqslant \min \{d_k, e\} - p</tex>, что: | #: Так как <tex>U_{k - 1} (s, e) \subseteq U_k (s, e)</tex>, то <tex>W_{k - 1} (s, e) = W^*_{k - 1} (s, e) \leqslant W^*_k (s, e)</tex>. Кроме того, если <tex>W'_k (s, e) > 0</tex>, то существует такое время <tex>s' \mid \max \{r_k, s + p\} \leqslant s' \leqslant \min \{d_k, e\} - p</tex>, что: | ||
− | #:<tex>W'_k (s, e) = w_k + W_{k - 1} (s, s') + W_{k - 1} (s', e) = w_k + W^*_{k - 1} (s, s') + W^*_{k - 1} (s', e) \leqslant W^*_k (s, | + | #:<tex>W'_k (s, e) = w_k + W_{k - 1} (s, s') + W_{k - 1} (s', e) = w_k + W^*_{k - 1} (s, s') + W^*_{k - 1} (s', e) \leqslant W^*_k (s, e)</tex> |
#: | #: | ||
#: Неравенство выполняется, так как <tex>w_k + W^*_{k - 1} (s, s') + W^*_{k - 1} (s', e)</tex> - суммарный вес расписания, состоящего из: | #: Неравенство выполняется, так как <tex>w_k + W^*_{k - 1} (s, s') + W^*_{k - 1} (s', e)</tex> - суммарный вес расписания, состоящего из: |
Версия 12:38, 14 июня 2015
Задача: |
Дано | работ и 1 станок. Для каждой работы известны её время появления и вес , а также дедлайн . Время выполнения всех работ равно . Требуется выполнить все работы, чтобы значение (суммарный вес просроченных работ) было минимальным.
Содержание
Алгоритм
Предисловие
Необходимо найти выполнимое множество работ динамического программирования. Предполагается, что работы отсортированы в порядке неубывания дедлайна. Следующая лемма показывает, что времена начала всех работ могут быть ограничены до множества, состоящего не более, чем из значений.
такое, что его суммарный вес максимален. Эта проблема решается с помощьюЛемма: |
Существует оптимальное расписание, в котором время начала каждой работы принадлежит множеству:
|
Доказательство: |
Рассмотрим оптимальное расписание | . Пусть — работы в в порядке неубывания дедлайна. Выполнимое расписание может быть получено из следующим образом. Первая работа может быть сдвинута влево до времени своего появления. Тогда работа сдвигается влево до времени своего появления или времени завершения работы . В общем, сдвигается влево, пока время её начала не равно максимуму из времени её появления и времени завершения уже сдвинутой работы .
Для любого
и таких, что , пусть — множество работ таких, что . Кроме того, пусть — максимальный суммарный вес подмножества такого, что существует выполнимое расписание для работ из этого подмножества такое, что:- свободно до времени и после времени ,
- время начала работ в принадлежат .
, если ни для какого подмножества работ не существует выполнимого расписания.
Псевдокод
Отсортировать работы так, чтобыforeach for to foreach if else return
Заметим, что
соответствует выполнимому расписанию, в котором работа начинается в момент времени .Время работы
По лемме
содержит элементов. В каждой итерации алгоритма мы выбираем времена и из , а для каждой такой пары ищем необходимое время . Из того, что итераций , получаем, что алгоритм работает за времени.Корректность алгоритма
Покажем, что вычисленное алгоритмом
равно , то есть возвращаемое им значение является оптимальным решением.Теорема: |
Для любого и для любого , выполняется:
|
Доказательство: |
Докажем индукцией по . Очевидно, что утверждение выполняется при . Допустим, что оно выполняется при .Если , то , из чего следует, что . Осталось показать, что: , если . Рассмотрим два неравенства:
|
Прочие задачи
Идеи данного алгоритма могут быть использованы и для некоторых других задач. Ф. Баптист, его автор, показал, что задача
может быть решена за .См. также
Источники информации
- Peter Brucker — Scheduling Algorithms — Springer, 2007 — p. 98-101 — ISBN 978-3-540-69515-8