Обсуждение участницы:Анна — различия между версиями
Анна (обсуждение | вклад) (→P \mid p_i=1 \mid \sum w_i U_i) |
Анна (обсуждение | вклад) |
||
Строка 7: | Строка 7: | ||
Оптимальное расписание для этой задачи будем задавать множеством работ <tex>S</tex>, за которые штраф начислен не будет. Работы, которые завершатся с опозданием, могут быть выполнены в конце в любом порядке.<br> | Оптимальное расписание для этой задачи будем задавать множеством работ <tex>S</tex>, за которые штраф начислен не будет. Работы, которые завершатся с опозданием, могут быть выполнены в конце в любом порядке.<br> | ||
Чтобы построить множество <tex>S</tex>, будем добавлять работы в порядке неуменьшения их времен окончания, и как только некоторая работа <tex>j</tex> опаздывает, удалим из <tex>S</tex> работу с минимальным значением <tex>w_i</tex> и поставим <tex>j</tex> на ее место.<br> | Чтобы построить множество <tex>S</tex>, будем добавлять работы в порядке неуменьшения их времен окончания, и как только некоторая работа <tex>j</tex> опаздывает, удалим из <tex>S</tex> работу с минимальным значением <tex>w_i</tex> и поставим <tex>j</tex> на ее место.<br> | ||
− | Пусть есть работы <tex>1 \cdots n</tex> с временами окончания <tex>d_1 \leq d_2 \leq \cdots \leq d_n</tex>. Тогда следующий алгоритм вычислит оптимальное множество <tex>S</tex>. | + | Пусть есть работы <tex>1 \cdots n</tex> с временами окончания <tex>d_1 \leq d_2 \leq \cdots \leq d_n</tex>. Будем называть ''простоем '' временной интервал, в который на машине ничего не обрабатывается. Тогда следующий алгоритм вычислит оптимальное множество <tex>S</tex>. |
+ | |||
+ | S = <tex>\varnothing</tex> | ||
+ | '''for''' j = 1 '''to''' n: | ||
+ | '''if''' j опаздывает, и все более ранние простои заполнены: | ||
+ | найти i: w[i] = <tex>\min\limits_{k \in S}</tex>(w[k]) | ||
+ | '''if''' w[i] < w[j]: | ||
+ | заменить i на j в S | ||
+ | '''else''': | ||
+ | добавить i в S и поставить i на место самого раннего простоя | ||
+ | Таким образом, работы, не попавшие в <tex>S</tex>, будут иметь минимальное значение <tex>w_i</tex>. | ||
+ | == Доказательство корректности == |
Версия 10:20, 5 мая 2016
Задача: |
Дано | одинаковых станков, на которых нужно выполнить работ. Любая работа на любом станке выполняется единицу времени. Для каждой работы есть время окончания — ожидается, что до этого времени она будет закончена, и штраф , который нужно будет выплатить в случае, если работа была закончена после . Необходимо минимизировать суммарный штраф, который придется выплатить.
Описание алгоритма
Оптимальное расписание для этой задачи будем задавать множеством работ
Чтобы построить множество , будем добавлять работы в порядке неуменьшения их времен окончания, и как только некоторая работа опаздывает, удалим из работу с минимальным значением и поставим на ее место.
Пусть есть работы с временами окончания . Будем называть простоем временной интервал, в который на машине ничего не обрабатывается. Тогда следующий алгоритм вычислит оптимальное множество .
S =for j = 1 to n: if j опаздывает, и все более ранние простои заполнены: найти i: w[i] = (w[k]) if w[i] < w[j]: заменить i на j в S else: добавить i в S и поставить i на место самого раннего простоя
Таким образом, работы, не попавшие в
, будут иметь минимальное значение .