J2ni2Cmax

Материал из Викиконспекты
Версия от 17:12, 22 июня 2013; 194.85.161.2 (обсуждение) (Доказательство корректности алгоритма)
Перейти к: навигация, поиск

Постановка задачи

Рассмотрим задачу:

  1. Дано n работ и 2 станка.
  2. Для каждой работы известно её время выполнения на каждом станке pi.
  3. Для каждой работы известна последовательность станков - порядок, в котором нужно выполнить работу. 1.
  4. Длина любой последовательности <=2.

Требуется минимизировать время окончания выполнения всех работ.

Описание алгоритма

M1 - первый станок. M2 - второй станок.

Разобьем все работы на четыре множества:

  1. I1 - множество всех работ, которые должны выполнится только на M1.
  2. I2 - множество всех работ, которые должны выполнится только на M2.
  3. I12 - множество всех работ, которые должны выполнится сначала на M1 затем на M2.
  4. I21 - множество всех работ, которые должны выполнится сначала на M2 затем на M1.

Решим задачу F2∣∣Cmax для I12 и для I21. Получим расписание S12 и S21.

Тогда оптимальное расписание для нашей задачи будет следующим:

  1. Расписание M1 : сначала I12 в соответсвии с расписанием S12. Затем I1 в произвольном порядке. Затем I21 в соответсвии с S21.
  2. Расписание M2 : сначала I21 в соответсвии с расписанием S21. Затем I2 в произвольном порядке. Затем I12 в соответсвии с S12.

Примечание: во время выполнения I21 на M1 или I12 на M2 могут возникнуть простои из-за того, что работа ещё не выполнилась на предыдущем станке.

Доказательство корректности алгоритма

Tj(x) - время выполнения множества работ x на станке j.

Gj - множество всех работ, которые нужно сделать хотя бы раз на j-м станке.(Формально G1=I1/cupI12/cupI21)

Лемма:
Расписание, построенное данным алгоритмом, обладает следующим свойством : один из станков работает без простоев.
Доказательство:

Рассмотрим 2 варианта:

  • T1(I12)+T1(I1)>=T2(I21). Тогда M1 работает без прерываний, т.к к тому моменту завершения выполнения I1 на M1 все работы I21 выполнены на M2.
  • Иначе T1(I12)+T1(I1)<T2(I21). Тогда M2 работает без прерываний, т.к к тому моменту завершения выполнения I2 на M2 все работы I12 выполнены на M1 .
  • Теорема:
    Расписание, построенное данным алгоритмом, является корректным и оптимальным.
    Доказательство:

    Корректность алгоритма очевидна. Докажем оптимальность. Пусть, для опеределенности M1 работает без прерываний. Рассмотрим станок на котором достигается Cmax . Если это M1, то оптимальность очевидна(Cmax>=iG1pi)

    Иначе Cmax достигается на M2.

    Тогда ответ равен решению задачи F2∣∣Cmax для работ I21, который оптимален.

    Сложность алгоритма

    Время работы алгоритма равно времени работы алгоритма F2∣∣Cmax.

    Сложность алгоритма O(nlogn).