J2ni2Cmax — различия между версиями
(→Доказательство корректности алгоритма) |
(→Доказательство корректности алгоритма) |
||
Строка 32: | Строка 32: | ||
==Доказательство корректности алгоритма== | ==Доказательство корректности алгоритма== | ||
<tex>T_{i}(x)</tex> - время выполнения множества работ <tex>x</tex> на станке <tex>i</tex>. | <tex>T_{i}(x)</tex> - время выполнения множества работ <tex>x</tex> на станке <tex>i</tex>. | ||
+ | |||
{{Лемма | {{Лемма | ||
|id=lemma1 | |id=lemma1 | ||
Строка 44: | Строка 45: | ||
<li> | <li> | ||
Иначе <tex>T_{1}(I_{12}) + T_{1}(I_{1}) < T_{2}(I_{21}) </tex>. | Иначе <tex>T_{1}(I_{12}) + T_{1}(I_{1}) < T_{2}(I_{21}) </tex>. | ||
− | Тогда <tex>M_{2}</tex> работает без прерываний, т.к к тому моменту завершения выполнения <tex>I_{2}</tex> на <tex> M_{2} </tex> все работы <tex>I_{12}</tex> выполнены на <tex>M_{1}</tex>. | + | Тогда <tex>M_{2}</tex> работает без прерываний, т.к к тому моменту завершения выполнения <tex>I_{2}</tex> на <tex> M_{2} </tex> все работы <tex>I_{12}</tex> выполнены на <tex>M_{1}</tex> . |
}} | }} | ||
Строка 53: | Строка 54: | ||
Корректность алгоритма очевидна. | Корректность алгоритма очевидна. | ||
Докажем оптимальность. | Докажем оптимальность. | ||
− | Рассмотрим станок на котором достигается <tex>C_{max}</tex> . Если | + | Пусть, для опеределенности <tex>M_{1}</tex> работает без прерываний. |
− | + | Рассмотрим станок на котором достигается <tex>C_{max}</tex> . Если это <tex>M_{1}</tex>, то оптимальность очевидна(<tex>C_{max} >= \sum\limits_{i \in I_{1} \cup I_{12} \cup I_{21}} p_i </tex>) | |
+ | Иначе <tex>C_{max}</tex> достигается на станке который может простаивать. Пусть для определенности это станок | ||
}} | }} | ||
Версия 16:41, 22 июня 2013
Содержание
Постановка задачи
Рассмотрим задачу:
- Дано работ и станка.
- Для каждой работы известно её время выполнения на каждом станке .
- Для каждой работы известна последовательность станков - порядок, в котором нужно выполнить работу. .
- Длина любой последовательности .
Требуется минимизировать время окончания выполнения всех работ.
Описание алгоритма
- первый станок. - второй станок.
Разобьем все работы на четыре множества:
- - множество всех работ, которые должны выполнится только на .
- - множество всех работ, которые должны выполнится только на .
- - множество всех работ, которые должны выполнится сначала на затем на .
- - множество всех работ, которые должны выполнится сначала на затем на .
Решим задачу для и для . Получим расписание и .
Тогда оптимальное расписание для нашей задачи будет следующим:
- Расписание : сначала в соответсвии с расписанием . Затем в произвольном порядке. Затем в соответсвии с .
- Расписание : сначала в соответсвии с расписанием . Затем в произвольном порядке. Затем в соответсвии с .
Примечание: во время выполнения
на или на могут возникнуть простои из-за того, что работа ещё не выполнилась на предыдущем станке.Доказательство корректности алгоритма
- время выполнения множества работ на станке .
Лемма: |
Расписание, построенное данным алгоритмом, обладает следующим свойством : один из станков работает без простоев. |
Доказательство: |
Рассмотрим 2 варианта: |
Теорема: |
Расписание, построенное данным алгоритмом, является корректным и оптимальным. |
Доказательство: |
Корректность алгоритма очевидна. Докажем оптимальность. Пусть, для опеределенности Иначе работает без прерываний. Рассмотрим станок на котором достигается . Если это , то оптимальность очевидна( ) достигается на станке который может простаивать. Пусть для определенности это станок |
Псевдокод
while if
Сложность алгоритма
Время работы алгоритма равно времени работы алгоритма .
Сложность алгоритма
.