Изменения

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

Opij1Sumwc

236 байт добавлено, 04:18, 7 июня 2016
Скобки, см. также
{{Утверждение
|statement=Оптимальный ответ для <tex>S = O \mid p_{ij}=1 \mid \sum w_i C_i</tex> равен оптимальному ответу к задаче <tex>S' = P \mid p_i=m, pmtn \mid \sum w_i C_i</tex>
|proof=Для доказательства этого утверждения необходимо показать то, что из оптимальности <tex> S' </tex> следует оптимальность <tex> S </tex>, и предоставить способ построения допустимого расписания для <tex> S </tex> из расписания для <tex> S' </tex>:
# Целевые функции задач совпадают, поэтому из оптимальности <tex> S' </tex> следует оптимальность <tex> S </tex>.
# Покажем, как получить из расписания <tex> S' </tex> допустимое расписание для <tex>S</tex> (в расписании для <tex>S'</tex> допустимость нарушает то, что на одном станке выполняется несколько блоков одной работы):
## После данного преобразования мы не изменим значение целевой функции (так как мы переставляем только элементы работ, выполняющихся в один и тот же момент времени). Также расписание станет допустимым для <tex> S </tex>, так как по определению реберной раскраски, не будет ни одной работы, два единичных блока которых выполняется на одном станке и во все моменты времени не окажется того, что на один станок назначено две работы.
}}
Чтобы непосредственно решить эту задачу, воспользуемся теоремой о том, что для задачи <tex> P \mid p_i=m, pmtn \mid \sum w_i C_i </tex> существует оптимальное расписание без прерываний<ref>P. Brucker. Scheduling Algorithms (2006), 5th edition, p. 121 </ref>. Известно, что для того, чтобы получить оптимальное расписание для такой задачи без прерываний, надо помещать работы по очереди на станки <tex>1 \dots m </tex> в порядке убывания весов. Длительности у всех работ совпадают, поэтому расписание будет состоять из <tex> \left\lfloor \fracdfrac{n}{m} \right\rfloor </tex> блоков по <tex> m </tex> работ и, возможно, одного неполного блока из <tex> n \bmod m </tex> работ. Таким образом, аналогично задаче <tex> O \mid p_{ij}=1 \mid C_{max}</tex>, чтобы получить допустимое расписание, можно не строить раскраску графа, а просто циклически сдвигать последовательности работ внутри каждого блока.
===Время работы===
Чтобы построить циклические сдвиги внутри одного блока требуется <tex> \mathcal{O}\left(m^2\right) </tex> времени. Всего блоков <tex> \mathcal{O}\left(\fracdfrac{n}{m}\right) </tex>.
Значит, итоговая ассимптотика равна <tex> \mathcal{O}(n \cdot m) </tex>.
==См. также.==
* [[Методы решения задач теории расписаний]]
* [[1outtreesumwc|<tex> 1 \mid outtree \mid \sum w_i C_i </tex>]]
* [[1ripi1sumwc|<tex> 1 \mid r_i,p_i = 1 \mid \sum w_i C_i</tex>]]
* [[RSumCi|<tex> R \mid \mid \sum C_i </tex>]]
==Примечания==
<references/>
[[Категория: Дискретная математика Алгоритмы и алгоритмыструктуры данных]]
[[Категория: Теория расписаний]]
24
правки

Навигация