Оптимальность жадного решения можно увидеть с помощью обменного аргумента следующим образом. Без ограничения общности предположим, что все прибыли различны и что рабочие места отсортированы в порядке убывания прибыли.
Исправьте решение S
. Из этого решения удалите все задания, которые не соответствуют сроку. Поскольку при таком преобразовании каждое задание завершается в установленный срок, результирующее решение S1
по-прежнему остается оптимальным. Для задания i
рассмотрим интервал I_i:=[0,min(n,deadline(i))]
(как в жадном алгоритме). В этом промежутке справа от задания i
находятся только задания с большим сроком выполнения (в противном случае они либо были бы рассмотрены ранее нашим заказом, либо могли быть обменены без нарушения их сроков). Поместите задание i
в крайнее правое положение в I_i
.
Итого имеем следующее утверждение.
Каждое решение S
может быть преобразовано в решение S'
со следующими свойствами.
S'
содержит все задания S
, которые завершаются до истечения срока.
- Для каждого задания
i
в S
все задания после i
в I_i
имеют большее время обработки.
- Для каждой работы
i
в S
нет времени простоя после i
в I_i
.
S'
имеет то же объективное значение, что и S
.
В частности, существует оптимальное решение S*
с указанными выше свойствами. Пусть S
будет алгоритмом, сгенерированным жадным алгоритмом. Обратите внимание, что S
также имеет свойства 2 и 3 выше. Пусть i
будет первым заданием, которое встречается в S
, но не в S*
. Пусть pos
будет временным интервалом i
в S
. Если бы pos
было пустым в S*
, S*
можно было бы улучшить, добавив i
, что противоречит оптимальности S*
. Если pos
было не пустым в S*
, работа i'
в pos
в S*
не может приносить больше прибыли, чем i
, поскольку в противном случае жадный алгоритм выбрал бы i'
в качестве pos
в S
. Следовательно, он должен иметь меньшую прибыль, чем i
. Это означает, что его можно удалить и заменить на i
в S*
, что также противоречит оптимальности S*
.
person
Codor
schedule
13.01.2015