Opij1Cmax — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
м (Оценка сложности алгоритма)
м
Строка 7: Строка 7:
 
===Описание алгоритма===
 
===Описание алгоритма===
 
Минимальное значение <tex> T_{min} </tex> минимизуруемой функции упирается в следующие ограничения:
 
Минимальное значение <tex> T_{min} </tex> минимизуруемой функции упирается в следующие ограничения:
# В допустимом расписании на каждом станке надо обработать каждую работу, поэтому <tex> T_{min} \ge n </tex>.
+
# В допустимом расписании на каждом станке надо обработать каждую работу, поэтому <tex> T_{min} \geqslant  n </tex>.
# В допустимом расписании каждую работу нужно обработать на всех станках, причем ее нельзя обрабатывать на двух станках одновременно, поэтому <tex> T_{min} \ge m </tex>.
+
# В допустимом расписании каждую работу нужно обработать на всех станках, причем ее нельзя обрабатывать на двух станках одновременно, поэтому <tex> T_{min} \geqslant m </tex>.
 
Тогда <tex> T_{min} = \max{(m, n)} </tex>.
 
Тогда <tex> T_{min} = \max{(m, n)} </tex>.
  
В случае <tex> n \ge m </tex> оптимальное расписание циклическими сдвигами последовательности <tex> 1 \dots n </tex> и выглядит следующим образом:
+
В случае <tex> n \geqslant m </tex> оптимальное расписание циклическими сдвигами последовательности <tex> 1 \dots n </tex> и выглядит следующим образом:
 
         '''1    2    3  ... k  k+1 ... n-1 n'''
 
         '''1    2    3  ... k  k+1 ... n-1 n'''
 
   '''M_1'''    1    2    3  ... k  k+1 ... n-1 n
 
   '''M_1'''    1    2    3  ... k  k+1 ... n-1 n

Версия 12:35, 6 июня 2016

[math]O \mid p_{ij} = 1 \mid C_{max}[/math]

Задача:
Дано [math]m[/math] одинаковых станков, которые работают параллельно и [math]n[/math] работ, котороые необходимо выполнить в произвольном порядке на всех станках. Время выполнения каждой работы на любом станке одинаково и равно 1. Необходимо минимизировать время выполнения всех работ.

Алгоритм

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

Минимальное значение [math] T_{min} [/math] минимизуруемой функции упирается в следующие ограничения:

  1. В допустимом расписании на каждом станке надо обработать каждую работу, поэтому [math] T_{min} \geqslant n [/math].
  2. В допустимом расписании каждую работу нужно обработать на всех станках, причем ее нельзя обрабатывать на двух станках одновременно, поэтому [math] T_{min} \geqslant m [/math].

Тогда [math] T_{min} = \max{(m, n)} [/math].

В случае [math] n \geqslant m [/math] оптимальное расписание циклическими сдвигами последовательности [math] 1 \dots n [/math] и выглядит следующим образом:

        1     2     3   ... k   k+1 ... n-1 n
 M_1    1     2     3   ... k   k+1 ... n-1 n
 M_2    n     1     2   ... k-1 k   ... n-2 n-1
 .      ...   ...   ... ... ... ... ... ... ...
 .      ...   ...   ... ... ... ... ... ... ...
 M_m    n-m+2 n-m+3 ... ... ... ... ... n-m n-m+1

Если же [math] n \lt m [/math], добавим [math] m - n [/math] фиктивных работ с номерами [math] n + 1 \dots m [/math], построим расписание способом выше и удалим из полученного расписания фиктивные работы.

Оценка сложности алгоритма

Минимальное значение [math] C_{max} [/math] вычисляется за [math] \mathcal{O}(1) [/math] времени. Построение расписания сводится к заполнению матрицы размером [math] m \times \max{(m, n)} [/math] и выполняется за [math] \mathcal{O}(m \dot (m + n)) [/math] времени.

См. также.