PSumCi — различия между версиями
(→Описание алгоритма) |
|||
| Строка 16: | Строка 16: | ||
'''for''' i = 0 '''to''' m | '''for''' i = 0 '''to''' m | ||
schedule[i].reverse() | schedule[i].reverse() | ||
| + | |||
| + | === Ассимптотика === | ||
| + | Так как нам понадобится сортировка для массива <tex>p_{i}</tex>, то итоговая ассимптотика будет <tex>\mathcal{O}(n\log{n})</tex>. | ||
Версия 19:18, 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()
Ассимптотика
Так как нам понадобится сортировка для массива , то итоговая ассимптотика будет .