1ripi1sumf — различия между версиями
(→=Линейные функции) |
(→Частные случаи) |
||
Строка 38: | Строка 38: | ||
Из того, как в алгоритме выбирались значения для <tex>t_i</tex> следует, что <tex>t_{j + 1}</tex> {{---}} минимальное возможное время, большее <tex>t_j,</tex> в которое можно начать выполнять какое-нибудь из оставшихся заданий. Если во время <tex>t_{j+1}</tex> в расписании <tex>S</tex> не выполняется никакого задания, то какое-то задание, которое могло бы выполнится в момент времени <tex>t_{j+1}</tex> выполняется в <tex>S</tex> позднее. Значит оно может быть перемещено в нашем расписании <tex>S</tex> на время <tex>t_{j+1}</tex> без увеличения целевой функции. Таким образом, наше новое расписание тоже будет оптимальным. Получили противоречие с максимальностью <tex>j</tex>. Значит из всех оптимальных расписаний нам подходят только те, в которых <tex>j = n</tex>. | Из того, как в алгоритме выбирались значения для <tex>t_i</tex> следует, что <tex>t_{j + 1}</tex> {{---}} минимальное возможное время, большее <tex>t_j,</tex> в которое можно начать выполнять какое-нибудь из оставшихся заданий. Если во время <tex>t_{j+1}</tex> в расписании <tex>S</tex> не выполняется никакого задания, то какое-то задание, которое могло бы выполнится в момент времени <tex>t_{j+1}</tex> выполняется в <tex>S</tex> позднее. Значит оно может быть перемещено в нашем расписании <tex>S</tex> на время <tex>t_{j+1}</tex> без увеличения целевой функции. Таким образом, наше новое расписание тоже будет оптимальным. Получили противоречие с максимальностью <tex>j</tex>. Значит из всех оптимальных расписаний нам подходят только те, в которых <tex>j = n</tex>. | ||
}} | }} | ||
− | == | + | ==Частный случай== |
− | + | В случае, когда все времена появлений заданий различны, оптимальное решение может быть посчитано за <tex>O(n\log n) </tex>. | |
− | + | ||
+ | Поскольку любое задание выполняется за единицу времени, а все функции <tex>f_i</tex> являются неубывающими, то будет достаточно отсортировать работы по возрастанию времен появления и выполнять каждую работу как только она появится. Поскольку все <tex>r_i</tex> различны, то промежутки выполнения работ не будут пересекаться {{---}} расписание будет корректным. | ||
== Пример == | == Пример == |
Версия 04:06, 5 июня 2016
Для каждой работы задана монотонно неубывающая функция
. Необходимо минимизировать где каждая считается на значении времени завершения выполнения задания с номером .Содержание
Решение
Эта задача может быть решена сведением к решению задачи о назначениях. А именно, покажем, что решение задачи состоит в сопоставлении различным заданиям различных времен начала выполнения работы. Если сопоставляем работе время , то вклад в целевую функцию будет .
Далее будет показано, что при построении оптимального расписания нам нужно будет рассмотреть всего
различных времен начала работ. Следовательно, подобная задача может быть решена за .Поскольку
— монотонно неубывающие функции, то это значит, что в оптимальном расписании работы должны начинать исполняться как можно раньше. Первые самых ранних для начала исполнения времен могут быть вычислены следующим алгоритмом :отсортиртировать по неубыванию времена появления= for =
Для того, чтобы найти оптимальное расписание, построим полный двудольный граф, в котором будут доли и ребра между ними:
Решив задачу о назначениях для данного графа, получим оптимальное расписание.
Доказательство корректности и оптимальности
Лемма: |
Пусть значения вычислены приведенным выше алгоритмом. Тогда существует оптимальное расписание в котором все задач распределены по всем временам |
Доказательство: |
Предположим, что в некоторое оптимальное расписание Из того, как в алгоритме выбирались значения для входят времена где а вместо времени используется какое-то другое. Из всех возможных таких оптимальных расписаний мы возьмем то, у которого будет максимально. следует, что — минимальное возможное время, большее в которое можно начать выполнять какое-нибудь из оставшихся заданий. Если во время в расписании не выполняется никакого задания, то какое-то задание, которое могло бы выполнится в момент времени выполняется в позднее. Значит оно может быть перемещено в нашем расписании на время без увеличения целевой функции. Таким образом, наше новое расписание тоже будет оптимальным. Получили противоречие с максимальностью . Значит из всех оптимальных расписаний нам подходят только те, в которых . |
Частный случай
В случае, когда все времена появлений заданий различны, оптимальное решение может быть посчитано за
.Поскольку любое задание выполняется за единицу времени, а все функции
являются неубывающими, то будет достаточно отсортировать работы по возрастанию времен появления и выполнять каждую работу как только она появится. Поскольку все различны, то промежутки выполнения работ не будут пересекаться — расписание будет корректным.Пример
Рассмотрим простой пример. Пусть у нас есть три задания, и каждое из них имеет время появления
Заданы функции :
Тогда, согласно алгоритму, задача сведется к следующей задаче о назначениях:
В результате будет выбрано расписание, в котором сначала будет идти третья, затем вторая, а затем первая работа.
См. также
Источники информации
- P. Brucker. Scheduling Algorithms (2006), 5th edition, стр. 19 - 20