1pi=1wirisumwi(ci - pi -ri) — различия между версиями
Dimitrova (обсуждение | вклад) (→Описание алгоритма) |
Dimitrova (обсуждение | вклад) (→Доказательство корректности алгоритма) |
||
Строка 17: | Строка 17: | ||
==Доказательство корректности алгоритма== | ==Доказательство корректности алгоритма== | ||
+ | Докажем, что алгоритм оптимален. Доказательство будем вести от противного.<br/> | ||
+ | Рассмотрим расписание <tex>S_{1}</tex>, полученное после выполнения нашего алгоритма, и оптимальное расписание <tex>S_{2}</tex>.<br/> | ||
+ | Возьмём первый момент времени <tex>t_{1}</tex>, когда расписания различаются. Пусть в этот момент времени в <tex>S_{1}</tex>, будет выполняться работа с весом <tex>w_{1}</tex>, а в <tex>S_{2}</tex> {{---}} работа с весом <tex>w_{2}</tex>.<br/> | ||
+ | Это первый момент, в котором расписания отличаются, значит в <tex>S_{2}</tex> работа с весом <tex>w_{1}</tex> выполнится в момент времени <tex>t_{2} > t_{1}</tex>.<br/> | ||
+ | Поменяем местами работы с весами <tex>w_{1}</tex> и <tex>w_{2}</tex> в <tex>S_{2}</tex> и полуим расписание <tex>S_{3}</tex>. Это возможно, потому что время появления этих работ не меньше <tex>t_{1}</tex>.<br/> | ||
+ | При такой перестановке ответы на задачу для <tex>S_{2}</tex> и <tex>S_{3}</tex> будут отличаться на | ||
+ | <ul><tex>(t_{1} - r_{2})w_{2} + (t_{2} - r_{1})w_{1} - ((t_{1} - r_{1})w_{1} + (t_{2} - r_{2})w_{2}) = t_{1}(w_{2} - w_{1}) + t_{2}(w_{1} - w_{2}) = (t_{1} - t_{2})(w_{2} - w_{1})</tex></ul> | ||
+ | Первая скобка отрицательная: <tex>t_{1} < t_{2}</tex>. Вторая скобка тоже отрицательная из того, что в <tex>S_{1}</tex> работа с весом <tex>w_1</tex> выполняется раньше, значит её вес должен быть больше <tex>w_2</tex>.<br/> | ||
+ | Итого имеем, что ответ для <tex>S_{2}</tex> больше, чем ответ для <tex>S_{3}</tex>. Следовательно расписание <tex>S_2</tex> неоптимальное. Получили противоречие. Значит не существует такого момента времени, когда расписание <tex>S_{1}</tex> отличается от оптимального. Следовательно мы доказали, что оно оптимальное. |
Версия 21:49, 18 июня 2012
Постановка задачи
Рассмотрим задачу:
- Дано работ и один станок.
- Для каждой работы известно её время появления и вес . Время выполнения всех работ равно .
Требуется выполнить все работы, чтобы значение
было минимальным.Описание алгоритма
Пусть
Для каждого очередного значения , которое изменяется от до времени окончания последний работы, будем:
- Выбирать работу из множества невыполненных работ, у которой и значение максимально.
- Если мы смогли найти работу , то выполняем её в момент времени
- Увеличиваем на один.
Доказательство корректности алгоритма
Докажем, что алгоритм оптимален. Доказательство будем вести от противного.
Рассмотрим расписание , полученное после выполнения нашего алгоритма, и оптимальное расписание .
Возьмём первый момент времени , когда расписания различаются. Пусть в этот момент времени в , будет выполняться работа с весом , а в — работа с весом .
Это первый момент, в котором расписания отличаются, значит в работа с весом выполнится в момент времени .
Поменяем местами работы с весами и в и полуим расписание . Это возможно, потому что время появления этих работ не меньше .
При такой перестановке ответы на задачу для и будут отличаться на
Первая скобка отрицательная:
Итого имеем, что ответ для больше, чем ответ для . Следовательно расписание неоптимальное. Получили противоречие. Значит не существует такого момента времени, когда расписание отличается от оптимального. Следовательно мы доказали, что оно оптимальное.