Opij1Sumwc — различия между версиями
Qradimir (обсуждение | вклад) м |
м (rollbackEdits.php mass rollback) |
||
(не показаны 2 промежуточные версии 2 участников) | |||
Строка 8: | Строка 8: | ||
{{Утверждение | {{Утверждение | ||
|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> | |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>: | + | |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>S'</tex> допустимость нарушает то, что на одном станке выполняется несколько блоков одной работы): | # Покажем, как получить из расписания <tex> S' </tex> допустимое расписание для <tex>S</tex> (в расписании для <tex>S'</tex> допустимость нарушает то, что на одном станке выполняется несколько блоков одной работы): | ||
Строка 16: | Строка 16: | ||
## После данного преобразования мы не изменим значение целевой функции (так как мы переставляем только элементы работ, выполняющихся в один и тот же момент времени). Также расписание станет допустимым для <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> \lfloor \ | + | Чтобы непосредственно решить эту задачу, воспользуемся теоремой о том, что для задачи <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 \dfrac{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}(m^2) </tex> времени. Всего блоков <tex> \mathcal{O}(\ | + | Чтобы построить циклические сдвиги внутри одного блока требуется <tex> \mathcal{O} \left( m^2 \right) </tex> времени. Всего блоков <tex> \mathcal{O} \left( \dfrac{n}{m} \right) </tex>. |
Значит, итоговая ассимптотика равна <tex> \mathcal{O}(n \cdot m) </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/> | <references/> | ||
− | [[Категория: | + | [[Категория: Алгоритмы и структуры данных]] |
[[Категория: Теория расписаний]] | [[Категория: Теория расписаний]] |
Текущая версия на 19:21, 4 сентября 2022
Задача: |
Дано | одинаковых станков, которые работают параллельно и работ, котороые необходимо выполнить в произвольном порядке на всех станках. Время выполнения каждой работы на любом станке одинаково и равно 1. Необходимо минимизировать взвешенную сумму времен завершения работ.
Алгоритм
Описание алгоритма
Утверждение: |
Оптимальный ответ для равен оптимальному ответу к задаче |
Для доказательства этого утверждения необходимо показать то, что из оптимальности следует оптимальность , и предоставить способ построения допустимого расписания для из расписания для :
|
Чтобы непосредственно решить эту задачу, воспользуемся теоремой о том, что для задачи [1]. Известно, что для того, чтобы получить оптимальное расписание для такой задачи без прерываний, надо помещать работы по очереди на станки в порядке убывания весов. Длительности у всех работ совпадают, поэтому расписание будет состоять из блоков по работ и, возможно, одного неполного блока из работ. Таким образом, аналогично задаче , чтобы получить допустимое расписание, можно не строить раскраску графа, а просто циклически сдвигать последовательности работ внутри каждого блока.
существует оптимальное расписание без прерыванийВремя работы
Чтобы построить циклические сдвиги внутри одного блока требуется
времени. Всего блоков . Значит, итоговая ассимптотика равна .См. также.
Примечания
- ↑ P. Brucker. Scheduling Algorithms (2006), 5th edition, p. 121