Изменения

Перейти к: навигация, поиск

Методы решения задач теории расписаний

3509 байт убрано, 14:43, 10 мая 2012
Отмена правки 22172 участника 109.188.171.154 (обсуждение) а, ок, ссылка есть
Отношение «более похоже» должно быть [[Отношение порядка | отношением частичного строгого порядка]]. Часто в качестве него можно выбрать отношение «длина наибольшего общего префикса решения <tex> A </tex> и <tex> S </tex> меньше наибольшего общего префикса решения <tex> B </tex> и <tex> S </tex>». Тогда если мы сможем увеличить длину наибольшего общего префикса для оптимального решения, не нарушив оптимальности, мы приблизимся к <tex> S </tex>. Можно выбирать и более сложные отношения, например, в доказательстве оптимальности алгоритма <tex> P \mid \mid \sum w_i C_i </tex> для решения задачи <tex> P \mid pmtn \mid \sum w_i C_i </tex> используется отношение «время последнего прерывания больше или количество прерываний меньше».
 
=== Примеры ===
==== 1 | prec | f_max ====
Дано множество работ <tex> J </tex> размера <tex> n </tex>, для которых заданы отношения предшествования, нужно минимизировать <tex> f_{max} = \max\limits_i f_i(C_i) </tex>, где <tex> f_i</tex> — монотонно неубывают по времени завершения работы <tex> i </tex>.
 
Приведем алгоритм(''Lawler's algorithm'') решения за <tex> O(n^2) </tex> и докажем его оптимальность:
# Пусть <tex> U \subseteq J </tex> — множество еще не назначенных работ. Пусть <tex> p(U) = \sum\limits_{i \in U} p_i </tex>.
# Назначим работу <tex> j \in U </tex>, у которой нет потомков в <tex> U </tex> и с минимальным значением <tex> f_j(p(U)) </tex> последней работой в <tex> U </tex>.
 
{{Теорема
|statement=
Предложенный алгоритм оптимален.
|proof=
Не теряя общности, пронумеруем работы в расписании, построенном нашим алгоритмом, от <tex> 1 </tex> до <tex> n </tex>. Пусть <tex> \pi(1) \dots \pi(n) </tex> — оптимальная последовательность работ такая, что наибольший общий суффикс их расписаний — максимален (пусть они впервые различаются в позиции <tex> r </tex>). Получили, следующую ситуацию:
 
pi: ... ... r-1 k .... j r r+1 ... n
 
Докажем, что можно привести это расписание к оптимальному расписанию с большим общим суффиксом. Заметим, что если выполнить работу r-1 прямо перед r, расписание все еще будет допустимым (несмотря на еще не доказанную оптимальность, наш алгоритм строит только допустимые расписания, а в построенном нами расписании r-1 стояло прямо перед r). По оптимальному расписанию j выполняется непосредственно перед r. Таким образом, у работ j и r нет ни одного потомка в можестве работ 1, 2.. r-2, r-1. По построенной нашим алгоритмом последовательности 1..n мы получаем, что <tex> f_{r-1}(\sum\limits_{i}^{r-1} p_i) \le f_j(\sum\limits_{i}^{r-1}) </tex> (иначе мы бы поставили последней на тот момент работу j, а не r). Сдвинем в последовательности <tex> \pi </tex> работы k .. j влево на одну позицию, а работу r-1 поместим перед r. Так как после сдвига влево, <tex>f_k \dots f_j </tex> не могли увеличиться, максимум так же не мог увеличиться. Следовательно, оптимальная последовательность <tex> \pi </tex> имела не самый длинный общий суффикс, что противоречит её выбору.
}}
== Примечания ==
Анонимный участник

Навигация