1ripi1sumf — различия между версиями
(→Частные случаи) |
Dominica (обсуждение | вклад) (→Пример) |
||
| Строка 43: | Строка 43: | ||
Поскольку любое задание выполняется за единицу времени, а все функции <tex>f_i</tex> являются неубывающими, то будет достаточно отсортировать работы по возрастанию времен появления и выполнять каждую работу как только она появится. Поскольку все <tex>r_i</tex> различны, то промежутки выполнения работ не будут пересекаться {{---}} расписание будет корректным. | Поскольку любое задание выполняется за единицу времени, а все функции <tex>f_i</tex> являются неубывающими, то будет достаточно отсортировать работы по возрастанию времен появления и выполнять каждую работу как только она появится. Поскольку все <tex>r_i</tex> различны, то промежутки выполнения работ не будут пересекаться {{---}} расписание будет корректным. | ||
| − | == Пример == | + | == Примеры == |
| + | ===Пример 1=== | ||
| + | Даны четыре задания. | ||
| + | |||
| + | <tex>r_1 = 3, f_1 = 5t </tex> | ||
| + | |||
| + | <tex>r_2 = 2, f_2 = t^2 </tex> | ||
| + | |||
| + | <tex>r_3 = 4, f_3 = t + 4 </tex> | ||
| + | |||
| + | <tex>r_4 = 1, f_4 = 2^t </tex> | ||
| + | |||
| + | Отсортируем задания по неубыванию <tex>r_i</tex>, а дальше будем выполнять задания по мере появления. В полученном расписании работы будут идти в порядке <tex>4, 2, 1, 3</tex> и давать в ответе <tex>2^{1 + 1} + (2 + 1)^2 + 5(3 + 1) + (4 + 1) + 4 = 42 </tex>, что является оптимальным результатом. | ||
| + | ==Пример 2== | ||
Рассмотрим простой пример. | Рассмотрим простой пример. | ||
Пусть у нас есть три задания, и каждое из них имеет время появления <tex>r_i = 0.</tex> Заданы функции <tex>f_i</tex>: | Пусть у нас есть три задания, и каждое из них имеет время появления <tex>r_i = 0.</tex> Заданы функции <tex>f_i</tex>: | ||
| Строка 69: | Строка 82: | ||
В результате будет выбрано расписание, в котором сначала будет идти третья, затем вторая, а затем первая работа. | В результате будет выбрано расписание, в котором сначала будет идти третья, затем вторая, а затем первая работа. | ||
| − | + | ||
== См. также == | == См. также == | ||
* [[Классификация задач]] | * [[Классификация задач]] | ||
Версия 04:22, 5 июня 2016
Для каждой работы задана монотонно неубывающая функция . Необходимо минимизировать где каждая считается на значении времени завершения выполнения задания с номером .
Содержание
Решение
Эта задача может быть решена сведением к решению задачи о назначениях. А именно, покажем, что решение задачи состоит в сопоставлении различным заданиям различных времен начала выполнения работы. Если сопоставляем работе время , то вклад в целевую функцию будет .
Далее будет показано, что при построении оптимального расписания нам нужно будет рассмотреть всего различных времен начала работ. Следовательно, подобная задача может быть решена за .
Поскольку — монотонно неубывающие функции, то это значит, что в оптимальном расписании работы должны начинать исполняться как можно раньше. Первые самых ранних для начала исполнения времен могут быть вычислены следующим алгоритмом :
отсортиртировать по неубыванию времена появления = for =
Для того, чтобы найти оптимальное расписание, построим полный двудольный граф, в котором будут доли и ребра между ними:
Решив задачу о назначениях для данного графа, получим оптимальное расписание.
Доказательство корректности и оптимальности
| Лемма: |
Пусть значения вычислены приведенным выше алгоритмом. Тогда существует оптимальное расписание в котором все задач распределены по всем временам |
| Доказательство: |
|
Предположим, что в некоторое оптимальное расписание входят времена где а вместо времени используется какое-то другое. Из всех возможных таких оптимальных расписаний мы возьмем то, у которого будет максимально. Из того, как в алгоритме выбирались значения для следует, что — минимальное возможное время, большее в которое можно начать выполнять какое-нибудь из оставшихся заданий. Если во время в расписании не выполняется никакого задания, то какое-то задание, которое могло бы выполнится в момент времени выполняется в позднее. Значит оно может быть перемещено в нашем расписании на время без увеличения целевой функции. Таким образом, наше новое расписание тоже будет оптимальным. Получили противоречие с максимальностью . Значит из всех оптимальных расписаний нам подходят только те, в которых . |
Частный случай
В случае, когда все времена появлений заданий различны, оптимальное решение может быть посчитано за .
Поскольку любое задание выполняется за единицу времени, а все функции являются неубывающими, то будет достаточно отсортировать работы по возрастанию времен появления и выполнять каждую работу как только она появится. Поскольку все различны, то промежутки выполнения работ не будут пересекаться — расписание будет корректным.
Примеры
Пример 1
Даны четыре задания.
Отсортируем задания по неубыванию , а дальше будем выполнять задания по мере появления. В полученном расписании работы будут идти в порядке и давать в ответе , что является оптимальным результатом.
Пример 2
Рассмотрим простой пример. Пусть у нас есть три задания, и каждое из них имеет время появления Заданы функции :
Тогда, согласно алгоритму, задача сведется к следующей задаче о назначениях:
В результате будет выбрано расписание, в котором сначала будет идти третья, затем вторая, а затем первая работа.
См. также
Источники информации
- P. Brucker. Scheduling Algorithms (2006), 5th edition, стр. 19 - 20