PSumCi — различия между версиями
(→Доказательство корректности) |
|||
Строка 21: | Строка 21: | ||
== Доказательство корректности == | == Доказательство корректности == | ||
+ | Докажем две леммы: | ||
+ | {{Лемма | ||
+ | |id=lemma1 | ||
+ | |statement= В оптимальном расписании на каждом станке работы выполняются в порядке неубывания. | ||
+ | |proof= Пусть это не так. Заметим что каждая работа даёт вклад в <tex>\sum C_{i}</tex> равный <tex>p_{i} \cdot (b_{i} + 1)</tex>. Тогда поменяем местами две работы которые нарушают порядок невозрастания. Заметим что <tex>\sum C_{i}</tex> уменьшилась. Следовательно {{---}} оптимальное расписание не оптимально. Противоречие.}} | ||
+ | |||
+ | {{Лемма | ||
+ | |id=lemma2 | ||
+ | |statement= В оптимальном расписании количество выполненных работ на любых двух станках отличается не более чем на <tex>1</tex>. | ||
+ | |proof= Пусть это не так. Как было отмечено в предыдущей лемме, каждая работа даёт вклад в <tex>\sum C_{i}</tex> равный <tex>p_{i} \cdot (b_{i} + 1)</tex>. Найдём два станка количество работ на которых отличается больше чем на <tex>1</tex>. Пусть это станки <tex>x</tex> и <tex>y</tex>. Причём на стнаке <tex>x</tex> выполняется больше работ. Тогда если отправить первую с начала работу со станка <tex>x</tex> на станок <tex>y</tex> то <tex>\sum C_{i}</tex> уменьшится на разность количества работ на станках <tex>x</tex> и <tex>y</tex>. Следовательно {{---}} оптимальное расписание не оптимально. Противоречие.}} | ||
+ | |||
+ | {{Теорема | ||
+ | |id=theorem1 | ||
+ | |statement= Алгоритм <tex>P \mid \mid \sum C_{i}</tex> строит оптимальное расписание. | ||
+ | |proof= Пусть это не так и оптимальное расписание отличается от расписания построенного алгоритмом. Заметим что расписание построенное алгоритмом удовлетворяет обеим леммам. Тогда можно воспользоваться одной из них чтобы улучшить оптимальное раписание. Следовательно {{---}} оптимальное расписание не оптимально. Противоречие. }} |
Версия 19:47, 4 июня 2016
Задача: |
Дано Цель — составить такое расписание, чтобы суммарное время окончания всех работ было минимальным. | работ с заданными временами выполнения . И параллельных станков с одинаковой скоростью выполнения работ.
Содержание
Описание алгоритма
Идея
Пусть
заданы в порядке невозрастания ( ). Пусть теперь . Тогда в оптимальном расписании работа с номером будет выполнена на станке , -ой с конца.Псевдокод
list<int> schedule[m] //Заведём список работ для каждого станка. Ответ будет храниться в нём. for i = 0 to n schedule[i mod m].push(i) //ставим работу с номером i на станок i mod m в конец.
//Заметим что расписание для каждого станка получилось перевёрнутым
//Поэтому развернём расписание для каждого станка. for i = 0 to m schedule[i].reverse()
Ассимптотика
Так как нам понадобится сортировка для массива
, то итоговая ассимптотика будет .Доказательство корректности
Докажем две леммы:
Лемма: |
В оптимальном расписании на каждом станке работы выполняются в порядке неубывания. |
Доказательство: |
Пусть это не так. Заметим что каждая работа даёт вклад в | равный . Тогда поменяем местами две работы которые нарушают порядок невозрастания. Заметим что уменьшилась. Следовательно — оптимальное расписание не оптимально. Противоречие.
Лемма: |
В оптимальном расписании количество выполненных работ на любых двух станках отличается не более чем на . |
Доказательство: |
Пусть это не так. Как было отмечено в предыдущей лемме, каждая работа даёт вклад в | равный . Найдём два станка количество работ на которых отличается больше чем на . Пусть это станки и . Причём на стнаке выполняется больше работ. Тогда если отправить первую с начала работу со станка на станок то уменьшится на разность количества работ на станках и . Следовательно — оптимальное расписание не оптимально. Противоречие.
Теорема: |
Алгоритм строит оптимальное расписание. |
Доказательство: |
Пусть это не так и оптимальное расписание отличается от расписания построенного алгоритмом. Заметим что расписание построенное алгоритмом удовлетворяет обеим леммам. Тогда можно воспользоваться одной из них чтобы улучшить оптимальное раписание. Следовательно — оптимальное расписание не оптимально. Противоречие. |