1outtreesumwc — различия между версиями
Shersh (обсуждение | вклад) |
Shersh (обсуждение | вклад) |
||
Строка 42: | Строка 42: | ||
|proof = | |proof = | ||
Каждое расписание может быть представлено последовательностью работ в порядке, в котором они выполняются. Пусть <tex> \pi </tex> будет оптимальной такой последовательностью со свойством, что количество работ между <tex> i </tex> и <tex> j </tex> равное <tex> l </tex> было бы минимальным. Можно считать, что <tex> l > 0 </tex>. Тогда расписание можно представить следующим образом: | Каждое расписание может быть представлено последовательностью работ в порядке, в котором они выполняются. Пусть <tex> \pi </tex> будет оптимальной такой последовательностью со свойством, что количество работ между <tex> i </tex> и <tex> j </tex> равное <tex> l </tex> было бы минимальным. Можно считать, что <tex> l > 0 </tex>. Тогда расписание можно представить следующим образом: | ||
+ | |||
+ | //TODO: картинка i ... k j | ||
+ | |||
+ | Рассмотрим 2 случая. | ||
+ | |||
+ | '''Случай 1''': <tex> k \in S(i) </tex> | ||
+ | |||
+ | Работа <tex> j </tex> не является потомком работы <tex> k </tex> , иначе у неё было бы <tex>2</tex> предка. Следовательно, <tex> k \sim j </tex>. По [[#lemma1 | лемме]] <tex> q(k) \ge q(j) </tex>, а по условию выбора <tex> j </tex> имеем <tex> q(j) \ge q(k) </tex>, значит, <tex> q(j) = q(k) </tex>. Опять же из [[#lemma1 | леммы]] следует, что работы <tex> k </tex> и <tex> j </tex> можно поменять местами, не ухудшив расписание. Это противоречит тому, что мы выбрали минимальное <tex> l </tex>. | ||
+ | |||
}} | }} | ||
== Литература == | == Литература == |
Версия 15:37, 10 июня 2013
Постановка задачи
Мы должны составить расписание с произвольными временами обработки на одном станке. Минимизировать нужно взвешенную сумму времен завершения работ. Зависимости между работами заданы исходящим деревом — работа, которая соответствует корню, доступна в начале, все другие работы зависят от одной работы — отца в дереве. Тривиальным примером подобной задачи является демонтаж сложного механизма.
Свойства оптимального расписания
Докажем некоторые свойства оптимального расписания, которые мы будем использовать в доказательстве корректности алгоритма.
Введем некоторые обозначения для удобства. За
обозначим список всех ребёр дерева. Для всех работ обозначим обозначим за всех потомков в дереве зависимостей, включая саму работу , введём новый парамерт работы .Для подмножества работ
определим:
Два непересекающихся множества работ
будем называть параллельными ( ), если для всех выполняется: не является ни предком, ни потомком . Если множества состоят из одной работы , будем писать . Каждое расписание представлено перестановкой .Лемма (1): |
Пусть — оптимальное расписание, и — два таких параллельных блока (множества работ, выполняемых последовательно) из , что выполняется сразу после . Пусть — расписание, полученное из перестановкой и . Тогда выполяются следующие пункты:
Если и , то — оптимальное расписание. |
Доказательство: |
Пусть . Так как — оптимальное расписание, то . Таким образом:
Поделим на :Если , то , следовательно расписание оптимально. |
Теорема: |
Пусть работы такие, что — потомок , и . Тогда существует оптимальное расписание, в котором работа идёт сразу после работы |
Доказательство: |
Каждое расписание может быть представлено последовательностью работ в порядке, в котором они выполняются. Пусть будет оптимальной такой последовательностью со свойством, что количество работ между и равное было бы минимальным. Можно считать, что . Тогда расписание можно представить следующим образом://TODO: картинка i ... k j Рассмотрим 2 случая. Случай 1: Работа не является потомком работы , иначе у неё было бы предка. Следовательно, . По лемме , а по условию выбора имеем , значит, . Опять же из леммы следует, что работы и можно поменять местами, не ухудшив расписание. Это противоречит тому, что мы выбрали минимальное . |
Литература
- P. Brucker. Scheduling Algorithms (2006), 5th edition, стр. 73 - 78