Участник:Dominica — различия между версиями
Dominica (обсуждение | вклад) м (→Источники информации) |
Dominica (обсуждение | вклад) м |
||
Строка 1: | Строка 1: | ||
<tex dpi = "200" >1 \mid r_i, p_i = 1 \mid \sum f_i</tex> | <tex dpi = "200" >1 \mid r_i, p_i = 1 \mid \sum f_i</tex> | ||
− | + | ||
− | + | Для каждой работы задана монотонно неубывающая функция <tex>f_i</tex>. Необходимо минимизировать <tex> \sum f_i, </tex> где каждая <tex>f_i</tex> считается на значении времени завершения выполнения задания с номером <tex>i</tex>. | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | Необходимо минимизировать <tex> \sum f_i, </tex> где <tex>f_i</tex> | ||
− | |||
==Решение== | ==Решение== | ||
Строка 18: | Строка 11: | ||
Далее будет показано, что при построении оптимального расписания нам нужно будет рассмотреть всего <tex>n</tex> различных времен начала работ. Следовательно, подобная задача может быть решена за <tex>O(n^3)</tex>. | Далее будет показано, что при построении оптимального расписания нам нужно будет рассмотреть всего <tex>n</tex> различных времен начала работ. Следовательно, подобная задача может быть решена за <tex>O(n^3)</tex>. | ||
− | Поскольку <tex>f_i</tex> {{---}} монотонно неубывающие функции, то это значит, что в оптимальном расписании работы должны начинать исполняться как можно раньше. Первые <tex>n</tex> самых ранних для начала исполнения времен <tex>t_i</tex> могут быть вычислены следующим алгоритмом | + | Поскольку <tex>f_i</tex> {{---}} монотонно неубывающие функции, то это значит, что в оптимальном расписании работы должны начинать исполняться как можно раньше. Первые <tex>n</tex> самых ранних для начала исполнения времен <tex>t_i</tex> могут быть вычислены следующим алгоритмом : |
+ | отсортиртировать по неубыванию времена появления <tex>r_i</tex> | ||
<tex>t_1</tex> = <tex>r_1</tex> | <tex>t_1</tex> = <tex>r_1</tex> | ||
'''for''' <tex> i \in \{ 2 \ldots n \} </tex> | '''for''' <tex> i \in \{ 2 \ldots n \} </tex> | ||
Строка 25: | Строка 19: | ||
− | Для того, чтобы найти оптимальное расписание, построим полный двудольный граф, в котором будут доли <tex>V_1 = \left \{ 1,\ldots,n \right\} и V_2 = \left \{ t_1,\ldots,t_n \right\}</tex> и ребра <tex>c_{ij}</tex> между ними: | + | Для того, чтобы найти оптимальное расписание, построим полный [[Основные_определения_теории_графов#Двудольный_граф |двудольный граф]], в котором будут доли <tex>V_1 = \left \{ 1,\ldots,n \right\} и V_2 = \left \{ t_1,\ldots,t_n \right\}</tex> и ребра <tex>c_{ij}</tex> между ними: |
<p> | <p> | ||
<tex> | <tex> | ||
c_{ij} = | c_{ij} = | ||
\left \{\begin{array}{ll} f_i(t_j + 1), & r_i \leqslant t_i \\ | \left \{\begin{array}{ll} f_i(t_j + 1), & r_i \leqslant t_i \\ | ||
− | \infty, & | + | \infty, & \mathrm{otherwise} |
\end{array} \right. | \end{array} \right. | ||
</tex> | </tex> | ||
Строка 46: | Строка 40: | ||
}} | }} | ||
+ | ==См. также == | ||
+ | * [[Классификация задач]] | ||
+ | * [[1precpmtnrifmax|<tex>1 \mid prec, pmtn, r_i \mid f_{\max}</tex>]] | ||
== Источники информации == | == Источники информации == | ||
* P. Brucker. Scheduling Algorithms (2006), 5th edition, стр. 19 - 20 | * P. Brucker. Scheduling Algorithms (2006), 5th edition, стр. 19 - 20 |
Версия 02:50, 16 мая 2016
Для каждой работы задана монотонно неубывающая функция . Необходимо минимизировать где каждая считается на значении времени завершения выполнения задания с номером .
Содержание
Решение
Эта задача может быть решена сведением к решению задачи о назначениях. А именно, покажем, что решение задачи состоит в сопоставлении различным заданиям различных времен начала выполнения работы. Если сопоставляем работе время , то вклад в целевую функцию будет .
Далее будет показано, что при построении оптимального расписания нам нужно будет рассмотреть всего
различных времен начала работ. Следовательно, подобная задача может быть решена за .Поскольку
— монотонно неубывающие функции, то это значит, что в оптимальном расписании работы должны начинать исполняться как можно раньше. Первые самых ранних для начала исполнения времен могут быть вычислены следующим алгоритмом :отсортиртировать по неубыванию времена появления= for =
Для того, чтобы найти оптимальное расписание, построим полный двудольный граф, в котором будут доли и ребра между ними:
Решив задачу о назначениях для данного графа, получим оптимальное расписание.
Доказательство корректности и оптимальности
Лемма: |
Существует оптимальное расписание в котором все задач распределены по всем временам , которые выбирает приведенный выше алгоритм. |
Доказательство: |
Предположим, что в некоторое оптимальное расписание Из того, как в алгоритме выбирались значения для входят времена где и из всех возможных оптимальных расписаний мы возьмем то, у которого будет максимально. следует, что — минимальное возможное время, большее в которое можно начать выполнять какое-нибудь из оставшихся заданий. Если во время в расписании не выполняется никакого задания, то какое-то задание, которое могло бы выполнится в момент времени выполняется в позднее. Значит оно может быть перемещено в нашем расписании на время без увеличения целевой функции. Таким образом, наше новое расписание тоже будет оптимальным. Получили противоречие с максимальностью . Значит из всех оптимальных расписаний нам подходят только те, в которых . |
См. также
Источники информации
- P. Brucker. Scheduling Algorithms (2006), 5th edition, стр. 19 - 20