1outtreesumwc — различия между версиями
Rybak (обсуждение | вклад) (→Алгоритм: Лемма 4.6) |
Rybak (обсуждение | вклад) м (→Алгоритм) |
||
Строка 23: | Строка 23: | ||
|statement= Пусть <tex>\pi</tex> {{---}} оптимальное расписание, <tex>I</tex> и <tex>J</tex> {{---}} два таких блока (множества работ, выполняемых последовательно) из <tex>\pi</tex>, что <tex>J</tex> выполняется сразу после <tex>I</tex>. Пусть <tex>\pi'</tex> {{---}} расписание, полученное из <tex>\pi</tex> перестановкой <tex>I</tex> и <tex>J</tex>. Тогда выполяются следующие пункты: | |statement= Пусть <tex>\pi</tex> {{---}} оптимальное расписание, <tex>I</tex> и <tex>J</tex> {{---}} два таких блока (множества работ, выполняемых последовательно) из <tex>\pi</tex>, что <tex>J</tex> выполняется сразу после <tex>I</tex>. Пусть <tex>\pi'</tex> {{---}} расписание, полученное из <tex>\pi</tex> перестановкой <tex>I</tex> и <tex>J</tex>. Тогда выполяются следующие пункты: | ||
а) <tex> I \sim J \Rightarrow q(I) \ge q(J)</tex> | а) <tex> I \sim J \Rightarrow q(I) \ge q(J)</tex> | ||
− | б) Если <tex>I \sim J</tex> и <tex>q(I) = q(J)</tex>, то <tex>\pi'</tex> | + | б) Если <tex>I \sim J</tex> и <tex>q(I) = q(J)</tex>, то <tex>\pi'</tex> {{---}} оптимальное расписание. |
|proof= | |proof= | ||
а) Пусть <tex>f = \sum w_i C_i</tex>. Так как <tex>\pi</tex> {{---}} оптимальное расписание, то <tex>f(\pi) \le f(\pi')</tex>. Таким образом: | а) Пусть <tex>f = \sum w_i C_i</tex>. Так как <tex>\pi</tex> {{---}} оптимальное расписание, то <tex>f(\pi) \le f(\pi')</tex>. Таким образом: | ||
Строка 33: | Строка 33: | ||
<tex>q(I) = w(I) / p(I) \ge w(J) / p(J) = q(J) </tex> | <tex>q(I) = w(I) / p(I) \ge w(J) / p(J) = q(J) </tex> | ||
− | б) Если <tex>q(I) = q(J) </tex>, то <tex>f(\pi) = f(\pi') </tex>, следовательно расписание <tex>\pi'</tex> | + | б) Если <tex>q(I) = q(J) </tex>, то <tex>f(\pi) = f(\pi') </tex>, следовательно расписание <tex>\pi'</tex> оптимально. |
}} | }} | ||
Версия 19:00, 21 июня 2012
Эта статья находится в разработке!
Содержание
Постановка задачи
Мы должны составить расписание с произвольными временами обработки на одном станке. Минимизировать нужно взвешенную сумму времен завершения работ. Зависимости между работами заданы исходящим деревом — работа, которая соответствует корню, доступна в начале, все другие работы зависят от одной работы — отца в дереве. Тривиальным примером подобной задачи является демонтаж сложного механизма.
Алгоритм
Решение данной задачи было предложено Адольфсоном и Ху[1] в 1973 году.
Докажем некоторые свойства оптимального расписания, которые мы будем использовать в доказательстве корректности алгоритма.
Введем некоторые обозначения для удобства. Обозначим за
поддерево работы в дереве зависимостей. Для всех работ обозначим . Для множества работ :
Два непересекающихся множества работ
будем называть параллельными ( ), если для всех выполняется: не является ни предком, ни потомком . Если множества состоят из одной работы , будем писать . Каждое расписание представлено перестановкой .Лемма: |
Пусть — оптимальное расписание, и — два таких блока (множества работ, выполняемых последовательно) из , что выполняется сразу после . Пусть — расписание, полученное из перестановкой и . Тогда выполяются следующие пункты:
а) б) Если и , то — оптимальное расписание. |
Доказательство: |
а) Пусть . Так как — оптимальное расписание, то . Таким образом:
Поделим на :б) Если , то , следовательно расписание оптимально. |
Литература
- P. Brucker. Scheduling Algorithms (2006), 5th edition, стр. 73 - 78
Примечания
- ↑ D. Adolphson and T.C. Hu. Optimal linear ordering. SIAM Journal of Applied Mathematics, 25:403–423, 1973.