1ripmtnsumwu — различия между версиями
Zernov (обсуждение | вклад) (→Специальные случаи) |
Zernov (обсуждение | вклад) |
||
| Строка 134: | Строка 134: | ||
Отсюда следует альтернативное решение для задачи [[1sumwu|<tex>1 \mid\mid \sum w_j U_j</tex>]], которое работает за <tex>O(n\sum w_j)</tex>. | Отсюда следует альтернативное решение для задачи [[1sumwu|<tex>1 \mid\mid \sum w_j U_j</tex>]], которое работает за <tex>O(n\sum w_j)</tex>. | ||
| + | |||
| + | ==См. также== | ||
| + | *[[1precpmtnrifmax|<tex>1 \mid prec,pmtn,r_i \mid f_{max}</tex>]] | ||
| + | *[[1sumwu| <tex>1 \mid\mid \sum w_i U_i</tex>]] | ||
==Источники информации== | ==Источники информации== | ||
Версия 15:44, 7 июня 2016
| Задача: |
Дана задача на нахождение расписания:
|
Содержание
Описание алгоритма
Идея
Пусть работы заданы в порядке неубывания их дедлайнов, то есть . За обозначим количество различных . За
Назовем множество работ выполнимым (англ. feasible), если существует такое расписание для работ из , что все работы будут выполнены без опозданий. Чтобы проверить, является ли множество работ выполнимым, воспользуемся упрощенной версией EDD правила (см. стр 70 в Брукере):
- Составим расписание работ таким образом, чтобы первой в расписании стояла работа с наименьшим значением . В любой момент времени, когда появляется новая работа, либо заканчивает выполняться текущая, вставим в расписание работу с наименьшим оставшимся сроком.
выполнимо тогда и только тогда, когда все работы в EDD расписании выполняются без опозданий. Это прямое следствие из уже теоремы 4.4 (Брукер). Если в содержится работ, то построение EDD расписание может быть выполнено за времени. Наша задача сводится к тому, чтобы найти выполнимое множество работ с максимальным суммарным весом.
Для данного непустого множества определим следующие величины:
Кроме того, обозначим за время последней выполненной работы из в EDD расписании. Оно состоит из периодов непрерывного выполнения работы, разделенных периодами бездействия, когда нет доступных работ для выполнения. Это означает, что может быть разделено на множества , для которых выполняется для .
Выполнимое множество является блоком (англ. block), если работы из обрабатываются непрерывно с начала и до конца, и не может быть разделен на подмножества, расписания для которых не пересекаются, например, если и не является объединением и таких, что . Решим задачу методами динамического программирования.
Введем величину — выполнимое и , если множеств, удовлетворяющих условиям, нет.
Максимальный вес выполнимого множества задается максимальным значением такого, что конечно, где . Посчитаем значения за итераций с начальными значениями
- для всех
- для всех и
не может содержаться в выполнимом множестве, если . Следовательно,
Отсюда следует, что нам нужно посчитать только такие значения для которых . Пусть и . Если , тогда . Иначе рассмотрим два случая.
Первый случай
Работа начинается после .
Рассмотрим два подслучая, для и .
- В первом случае
- Во втором работы из обрабатываются непрерывно в интервале , потому что иначе начнет обрабатываться до .
Делаем вывод, что . Предположим, что такое, что и, если это не так, заменим на выполнимое подмножество из для которого это выполняется. Из этого следует, что
- .
Второй случай
Работа начинается перед .
В этом случае существует простой в EDD расписании для множества после . Пусть — последний блок в , то есть является блоком в . Тогда , в таком случае обязано выполняться равенство , иначе расписание для будет не оптимально.
Кроме того, мы можем предположить, что общее количество сделанной работы в , лежащих в интервале , — минимально, учитвая выполнимые множества такие, что .
Пусть — даты появления , и — некоторое целочисленное значение . За возьмем минимальное число сделанной работы в итервале , учитвая выполнимые множества такие, что . Если таких выполнимых множеств нет, то .
Используя данную запись, количество времен доступнух для обработки работы в интервале записывается формулой
- .
Количество готовности работы (какое количество уже сделано) после времени
- .
И время выполнения последней работы из
- .
Конечная формула
Собирая все написаное выше, приходим к рекуррентной формуле:
В этой формуле внутренняя минимизация берется по всем различным датам появления таких, что и целочисленным значениям , . Важно, что формула корректна только в том случае, если правая часть не превышает и, если это не так, то .
Рассмотрим, как посчитать значения для и . Если , то . Иначе значение можно посчитать, используя непустое множество . Если , то. Кроме того, в общем случае, заметим, что выполнятся
- .
Где за берется наименьшая дата появления, меньшая чем , если такая существует.
Если , то пусть будет блоком таким, что . Можно предположить, что . Следовательно, общее количество сделанной работы из в интервале будет равно
- .
Пусть будет наименьшей датой появления, меньшей или равной . Тогда общее количество сделанной работы в в интервале будет равно . Следовательно, общее количество сделанной работы в в интервале будет равно
- .
Правая часть выражения должна быть минимальной для множеств и . Собирая все вместе, получим формулу
С начальными значениями
- для
- для
Максимальный вес вычислимого множества может быть посчитан с помощью нахождения максимального значения такого, что — конечно.
Ассимптотика
На каждой из итераций для существует вычислямых значений , по одному на каждую комбинацию из . По представленной выше формуле, каждое значение находится с помощью минимизации из выборов . Следовательно, время, требуемое для вычисления значений , ограниченно на каждой итерации. Всего нам нужно посчитать значений , по одному на каждую комбинацию и . Из формулы, приведенной для вычисления , каждое значение считается с помощью минимизации выборов . Следовательно, время, требуемое для вычисления значений на каждой итерации, ограниченно . Максимальный вес вычислимого множества может быть посчитан с помощью нахождения максимального значения такого, что — конечно. Сделать это мы можем за . Итоговая сложность составляет .
Чтобы создать вычислимое множество с максимальным весом, мы считаем характеристический вектор, учитывая значения и . Вычисляем веторы за , это значение меньше, чем .
Специальные случаи
Если времена появления и дедлайны идут в одинаковом порядке, то есть и , то второй случай никогда не возникает. В этом случае, формула для вычисления может быть упрощена:
Либо, если мы примем , то:
Отсюда следует, что мы делаем вычислений в этом случае, когда максимальный вес вычислимого множества такой, что — конечно. В случае, если все веса одинаковы, но время уменьшается до .
Когда все времена появления работ равны нулю, рекурретная формула упрощается до
Отсюда следует альтернативное решение для задачи , которое работает за .
См. также
Источники информации
- Peter Brucker «Scheduling Algorithms», fifth edition, Springer — с. 88-93 ISBN 978-3-540-69515-8