1ripmtnsumwu — различия между версиями
Zernov (обсуждение | вклад) |
Zernov (обсуждение | вклад) (→Первый случай) |
||
Строка 44: | Строка 44: | ||
=== Первый случай === | === Первый случай === | ||
+ | Работа <tex>j</tex> начинается после <tex>C(S \setminus \{j\})</tex>. Рассмотрим два подслучая, для <tex>C(S \setminus \{j\}) \leqslant r_{j}</tex> и <tex>C(S \setminus \{j\}) > r_{j}</tex>. | ||
+ | # В первом случае <tex>C(S) = r_{j} + p_{j}</tex> | ||
+ | # Во втором работы из <tex>C(S \setminus \{j\})</tex> обрабатываются непрерывно в интервале <tex>[r_{j}, C(S \setminus \{j\})]</tex>, потому что иначе <tex>j</tex> начнет обрабатываться до <tex>C(S \setminus \{j\})</tex>. | ||
+ | |||
+ | Делаем вывод, что <tex>C_{j} (r, w) = \max(r_{j} , C(S \setminus \{j\}) + p_{j}</tex>. Предположим, что <tex>C(S \setminus \{j\})</tex> такое, что <tex>C(S \setminus \{j\}) = C_{j - 1}(r, w - w_{j})</tex> и, если это не так, заменим <tex>C(S \setminus \{j\})</tex> на выполнимое подмножество из <tex>1 \ldots j - 1</tex> для которого это выполняется. Из этого следует, что | ||
+ | :<tex>C_{j}(r, w) = \max(r_{j} , C_{j - 1}(r, w − w_{j})) + p_{j}</tex>. | ||
=== Второй случай === | === Второй случай === |
Версия 01:39, 7 июня 2016
Задача: |
Дана задача на нахождение расписания:
|
Содержание
Описание алгоритма
Идея
Пусть работы заданы в порядке неубывания их дедлайнов, то есть
. За обозначим количество различных .Назовем множество работ
выполнимым (англ. feasible), если существует такое расписание для работ из , что все работы будут выполнены без опозданий. Чтобы проверить, является ли множество работ выполнимым, воспользуемся упрощенной версией EDD правила (см. стр 70 в Брукере):- Составим расписание работ таким образом, чтобы первой в расписании стояла работа с наименьшим значением . В любой момент времени, когда появляется новая работа, либо заканчивает выполняться текущая, вставим в расписание работу с наименьшим оставшимся сроком.
выполнимо тогда и только тогда, когда все работы в EDD расписании выполняются без опозданий. Это прямое следствие из уже теоремы 4.4 (Брукер). Если в содержится работ, то построение EDD расписание может быть выполнено за времени. Наша задача сводится к тому, чтобы найти выполнимое множество работ с максимальным суммарным весом.
Для данного непустого множества
определим следующие величины:Кроме того, обозначим за
время последней выполненной работы из в EDD расписании. Оно состоит из периодов непрерывного выполнения работы, разделенных периодами бездействия, когда нет доступных работ для выполнения. Это означает, что может быть разделено на множества , для которых выполняется для .Выполнимое множество
является блоком (англ. block), если работы из обрабатываются непрерывно с начала и до конца, и не может быть разделен на подмножества, расписания для которых не пересекаются, например, если и не является объединением и таких, что . Решим задачу методами динамического программирования.Введем величину
— выполнимое и , если множеств, удовлетворяющих условиям, нет.Максимальный вес выполнимого множества задается максимальным значением
такого, что конечно, где . Посчитаем значения за итераций с начальными значениями- для всех
- для всех и
не может содержаться в выполнимом множестве, если . Следовательно,
Отсюда следует, что нам нужно посчитать только такие значения
для которых . Пусть и . Если , тогда . Иначе рассмотрим два случая.Первый случай
Работа
начинается после . Рассмотрим два подслучая, для и .- В первом случае
- Во втором работы из обрабатываются непрерывно в интервале , потому что иначе начнет обрабатываться до .
Делаем вывод, что
. Предположим, что такое, что и, если это не так, заменим на выполнимое подмножество из для которого это выполняется. Из этого следует, что- .
Второй случай
Конечная формула
Ассимптотика
Специальные случаи
Источники информации
- Peter Brucker «Scheduling Algorithms», fifth edition, Springer — с. 88-93 ISBN 978-3-540-69515-8