J2ni2Cmax — различия между версиями
Watson (обсуждение | вклад) (→Описание алгоритма) |
Watson (обсуждение | вклад) (→Описание алгоритма) |
||
Строка 23: | Строка 23: | ||
<li>Расписание <tex>M1</tex>: <tex>I12</tex> в соответсвии с расписанием <tex>S12</tex>. <tex>I1</tex> в произвольном порядке. Затем <tex>I21</tex> в соответсвии с <tex>S21</tex>. | <li>Расписание <tex>M1</tex>: <tex>I12</tex> в соответсвии с расписанием <tex>S12</tex>. <tex>I1</tex> в произвольном порядке. Затем <tex>I21</tex> в соответсвии с <tex>S21</tex>. | ||
<li>Расписание <tex>M2</tex>:<tex>I21</tex> в соответсвии с расписанием <tex>S21</tex>. Затем <tex>I2</tex> в произвольном порядке. Затем <tex>I12</tex> в соответсвии с <tex>S12</tex>. | <li>Расписание <tex>M2</tex>:<tex>I21</tex> в соответсвии с расписанием <tex>S21</tex>. Затем <tex>I2</tex> в произвольном порядке. Затем <tex>I12</tex> в соответсвии с <tex>S12</tex>. | ||
+ | <ul> | ||
==Доказательство корректности алгоритма== | ==Доказательство корректности алгоритма== |
Версия 14:33, 22 июня 2013
Содержание
Постановка задачи
Рассмотрим задачу:
- Дано работ и станка.
- Для каждой работы известно её время выполнения на каждом станке.
- Для каждой работы известна последовательность станков - порядок, в котором нужно выполнить работу. .
- Длина любой последовательности .
Требуется минимизировать время окончания выполнения всех работ.
Описание алгоритма
- первый станок. - второй станок. Разобьем все работы на четыре множества:
- - множество всех работ, которые должны выполнится только на .
- - множество всех работ, которые должны выполнится только на .
- - множество всех работ, которые должны выполнится сначала на затем на .
- - множество всех работ, которые должны выполнится сначала на затем на .
- Расписание : в соответсвии с расписанием . в произвольном порядке. Затем в соответсвии с .
- Расписание
Доказательство корректности алгоритма
Теорема: Расписание, построенное данным алгоритмом, является корректным и оптимальным.Доказательство: Доказательство будем вести от противного.
Рассмотрим расписание , полученное после выполнения нашего алгоритма, и оптимальное расписание .
Возьмём первый момент времени , когда расписания различаются. Пусть в этот момент времени в , будет выполняться работа с весом , а в — работа с весом .
Это первый момент, в котором расписания отличаются, значит в работа с весом выполнится в момент времени .
Поменяем местами работы с весами и в и полуим расписание . Это возможно, потому что время появления этих работ не меньше .
При такой перестановке ответы на задачу для и будут отличаться наПервая скобка отрицательная:
Итого имеем, что ответ для . Вторая скобка тоже отрицательная из того, что в работа с весом выполняется раньше, значит её вес должен быть больше . больше, чем ответ для . Следовательно расписание неоптимальное. Получили противоречие. Значит не существует такого момента времени, когда расписание отличается от оптимального. Следовательно мы доказали, что оно оптимальное.
Псевдокод
Сложность алгоритма
Сложность алгоритма . : в соответсвии с расписанием . Затем в произвольном порядке. Затем в соответсвии с .
-
Режим задачу для и для . Получим расписание и .
Тогда оптимальное расписание для нашей задачи будет следующим: