Изменения

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

1sumwu

125 байт убрано, 09:09, 4 июня 2016
Нет описания правки
{{Задача
|definition= Есть один станок и <tex>n</tex> работ. Для каждой работы заданы время выполнения <tex> p_i,</tex> дедлаин дедлайн <tex>d_i</tex> и стоимось стоимость выполнения этой работы <tex>w_i \geqslant 0</tex>.Необходим Необходимо минимизировать <tex>\sum w_i U_i</tex>.
}}
Данная задача не может быть решена за полиномиальное время.
==Общее решение==
В общем случае, когда времена выполнения работ <tex>p_i</tex> могут быть сколь угодно большими или дробными, данная задача может быть решена с помощью перебора.Далее будем пользоваться следующим фактомшироко будет использоваться следующий факт:
{{Лемма
|proof= Пусть у нас есть некоторое оптимальное раписание <tex>S</tex>. Получим необходимое нам расписание путем переставления некоторых работ.
#Если работа с номером <tex> i</tex> выполнится в <tex>S</tex> с опозданием, то переставим эту работу в конец. При этом, так как работа просрочна в оптимальном расписании <tex>S</tex>, при такой перестановке не произойдет увеличения целевой функции.
#Если работы с номерами <tex>i</tex> и <tex>j</tex> в расписании <tex>S</tex> выполняются вовремя, но при этом <tex>d_i < d_j </tex>, но и <tex>j</tex> стоит в <tex>S</tex> раньше <tex>i</tex>. Тогда , то переставим работу с номером <tex>j</tex> так, чтобы она выполнялась после работы <tex>i</tex>. Таким образом, каждая из работ, находившихся в <tex>S</tex> между <tex>j</tex> и <tex>i</tex>, включая <tex>i</tex>, будет выполняться в новом расписании на <tex>p_j</tex> единиц времени раньше. Эта перестановка не повлияет на оптимальнось расписания:
#*Ни одна из работ, котарая успевала выполниться в расписании <tex>S</tex>, не попадет в список просроченных работ при переставлении её на более раннее время.
#*Число работ, не успевающих выполниться вовремя, не может уменьшится, иначе бы возникло противоречие в с исходным выбором <tex>S</tex>, как оптимального решения.#*Поскольку <tex>d_i < d_j </tex> и работа <tex>i</tex> будет заканчиваться на <tex>p_j</tex> единиц времени раньше, то стоящая сразу послее после нее работа <tex>j</tex> тоже будет успевать выполниться.
}}
Перебираем Для решения переберем все битовые маски. Для каждой маски будем считать, что если бит, соответствующий заданию с номером <tex>i</tex> равен <tex>1</tex>, то будем предполагать, что это задание успеет выполниться, а если бит равен <tex>0</tex> {{---}} то не успеет.Далее, согласно доказанной лемме, мы должны выписать все задания, которые, согласно по нашему предположению, могут быть выполнены без опоздания в начало расписания в порядке возрастания дедлайнов <tex>d_i</tex>, а оставшиеся записать в конец расписания в любом порядке.Далее проверяем полученное расписание на корректность, и , в случае успеха, обновляем ответ.
==Псевдополиномиальное решение==
264
правки

Навигация