Изменения

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

PSumCi

675 байт добавлено, 22:15, 4 июня 2016
Псевдокод
=== Псевдокод ===
Здесь предполагается что Итоговым расписанием будет массив <tex>\mathtt{schedule}</tex> где в <tex>\mathtt{schedule[i][j]}</tex> храниться номер работы отсортирован в порядке неубывания времён выполнениякоторую надо исполнить на станке номер <tex>i</tex>, <tex>j</tex>-ой по счёту.
'''function''' getSchedule(p : '''int'''[n]): '''list'''<'''int'''>[m] '''Pair'''<'''int''','''int'''> jobs[n] '''for''' i = 0 '''to''' n jobs[i] = <tex>\langle</tex>p[i], i<tex>\rangle</tex> <font color=green>// Создаём пары для востановления номера работы после сортировки.</font> sort(jobs) <font color=green>// Cортируем массив в порядке уменьшения p[i].</font><br> '''list'''<'''int'''> schedule[m] <font color=green> //Заведём список работ для каждого станка. Ответ будет храниться в нём.</font> '''for''' i = 0 '''to''' n schedule[i mod m].pushpushFront(jobs[i].second) <font color=green>//ставим Cтавим i-ую в порядке уменьшения p[i] работу с номером i на станок i mod m в конец.</font><br> <font color=green>//Заметим что расписание для каждого станка получилось перевёрнутым<br> //Поэтому развернём расписание для каждого станка.</font> '''for''' i = 0 ''return'to''' m schedule[i].reverse()
=== Ассимптотика ===
|id=lemma1
|statement= В оптимальном расписании на каждом станке работы выполняются в порядке неубывания времён выполнения.
|proof= Пусть это не так. Заметим что <tex>\sum \limits_{i=0}^{n-1} C_{i} = \sum \limits_{i=0}^{n-1} p_{i} \cdot b_{i}</tex>. Следовательно каждая работа даёт вклад равный <tex>p_{i} \cdot b_{i}</tex>. Тогда поменяем местами две работы которые нарушают порядок невозрастания. Заметим что <tex>\sum \limits_{i=0}^{n-1} C_{i}</tex> уменьшилась. Следовательно {{---}} оптимальное расписание не оптимально. Противоречие.}}
{{Лемма
|id=lemma2
|statement= В оптимальном расписании количество выполненных работ на любых двух станках отличается не более чем на <tex>1</tex>.
|proof= Пусть это не так. Как было отмечено в предыдущей лемме, каждая работа даёт вклад в <tex>\sum \limits_{i=0}^{n-1} C_{i}</tex> равный <tex>p_{i} \cdot b_{i}</tex>. Найдём два станка количество работ на которых отличается больше чем на <tex>1</tex>. Пусть это станки <tex>x</tex> и <tex>y</tex>. Причём на стнаке <tex>x</tex> выполняется больше работ. Тогда если отправить первую с начала работу со станка <tex>x</tex> на станок <tex>y</tex> то <tex>\sum \limits_{i=0}^{n-1} C_{i}</tex> уменьшится на разность количества работ на станках <tex>x</tex> и <tex>y</tex>. Следовательно {{---}} оптимальное расписание не оптимально. Противоречие.}}
{{Теорема
|proof= Пусть это не так и оптимальное расписание отличается от расписания построенного алгоритмом. Заметим что расписание построенное алгоритмом удовлетворяет обеим леммам. Тогда можно воспользоваться одной из них чтобы улучшить оптимальное раписание. Следовательно {{---}} оптимальное расписание не оптимально. Противоречие. }}
== См. также ==* [[Pintreepi1Lmax|<tex>P \mid intree, p_{i} = 1 \mid L_{max}</tex>]]* [[PpmtnriLmax|<tex>P \mid pmtn, r_i \mid L_{max}</tex>]]* [[Ppi1sumwu|<tex>P \mid p_i=1 \mid \sum w_i U_i</tex>]]== Источники информации ===
* P. Brucker. Scheduling Algorithms (2006), 5th edition, стр. 22
[[Категория: Дискретная математика Алгоритмы и алгоритмыструктуры данных]]
[[Категория: Теория расписаний]]
Анонимный участник

Навигация