1pi=1wirisumwi(ci - pi -ri)
Постановка задачи
Рассмотрим задачу:
- Дано работ и один станок.
- Для каждой работы известно её время появления и вес . Время выполнения всех работ равно .
Требуется выполнить все работы, чтобы значение
было минимальным.Описание алгоритма
Пусть
Для каждого очередного значения , которое изменяется от до времени окончания последний работы, будем:
- Выбирать работу из множества невыполненных работ, у которой и значение максимально.
- Если мы смогли найти работу , то выполняем её в момент времени
- Увеличиваем на один.
Доказательство корректности алгоритма
Докажем, что алгоритм оптимален. Доказательство будем вести от противного.
Рассмотрим расписание , полученное после выполнения нашего алгоритма, и оптимальное расписание .
Возьмём первый момент времени , когда расписания различаются. Пусть в этот момент времени в , будет выполняться работа с весом , а в — работа с весом .
Это первый момент, в котором расписания отличаются, значит в работа с весом выполнится в момент времени .
Поменяем местами работы с весами и в и полуим расписание . Это возможно, потому что время появления этих работ не меньше .
При такой перестановке ответы на задачу для и будут отличаться на
Первая скобка отрицательная:
Итого имеем, что ответ для больше, чем ответ для . Следовательно расписание неоптимальное. Получили противоречие. Значит не существует такого момента времени, когда расписание отличается от оптимального. Следовательно мы доказали, что оно оптимальное.