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

Материал из Викиконспекты
Перейти к: навигация, поиск
Строка 18: Строка 18:
 
Далее мы расширяем сеть, показанную на рисунке 1 следующим образом:
 
Далее мы расширяем сеть, показанную на рисунке 1 следующим образом:
  
<tex>I_K</tex> - произвольный интервал узел на рисунке, обозначим через <tex> J_{i_1}, J_{i_2}, . . . , J_{i_s} </tex> набор предшественников узла <tex>I_K</tex>.
+
<tex>I_K</tex> - произвольный интервал узел на рисунке, обозначим через <tex> J_{i_1}, J_{i_2}, . . . , J_{i_s} </tex> набор предшественников узла <tex>I_K</tex>. Тогда замененная нами подсеть определяется как <tex> I_K, J_{i_1}, J_{i_2}, . . . , J_{i_s} </tex>, которая показана на рисунке 2.1; Расширение сети показано на рисунке 2.2.
 
 
Тогда замененная нами подсеть определяется как <tex> I_K, J_{i_1}, J_{i_2}, . . . , J_{i_s} </tex>, которая показана на рисунке 5.9 (а), расширение сети показано на рисунке 5.9 (б).{{TODO | t = ДОБАВИТЬ_Рисунок 5.9: Расширение сети.}}
 
  
 
Cчитаем, что машины индексируются в порядке невозрастания скоростей <tex> s_1 \ge s_2 \ge . . . \ge s_m </tex>, кроме того <tex>s_{m+1} = 0</tex>.
 
Cчитаем, что машины индексируются в порядке невозрастания скоростей <tex> s_1 \ge s_2 \ge . . . \ge s_m </tex>, кроме того <tex>s_{m+1} = 0</tex>.
  
Расширенная подсеть строится путем добавления к вершинам <tex> I_K, J_{i_1}, J_{i_2}, . . . , J_{i_s} </tex> вершин <tex>(K, 1), (K, 2), . . . (K, m) </tex>.  
+
Расширенная подсеть строится путем добавления к вершинам <tex> I_K, J_{i_1}, J_{i_2}, . . . , J_{i_s} </tex> вершин <tex>(K, 1), (K, 2), . . . (K, m) </tex>. При <tex>j = 1,..., m </tex>, есть дуги от <tex>(K, j)</tex> до <tex>I_K</tex> с емкостью <tex> j(s_j - s_{j+1}) T_K </tex> и для всех <tex>ν = 1,. . . , s</tex> и <tex>j = 1,. . ., m</tex> существует дуга из <tex>J_{i_ν}</tex> в <tex>(K, J)</tex> с емкостью <tex> (s_j - s_{j+1}) T_K </tex>.
 
 
При <tex>j = 1,..., m </tex>, есть дуги от <tex>(K, j)</tex> до <tex>I_K</tex> with capacity <tex> j(s_j - s_{j+1}) T_K </tex> и для всех <tex>ν = 1,. . . , s</tex> и <tex>j = 1,. . ., m</tex> существует дуга из <tex>J_{i_ν}</tex> в <tex>(K, J)</tex> with capacity <tex> (s_j - s_{j+1}) T_K </tex>.
 
  
Для каждого <tex>I_K</tex> у нас есть такие расширения. Кроме того, мы сохраняем дуги от <tex>s</tex> до <tex>J_i</tex> и мощностью <tex>p_i</tex> дуг из <tex>I_K</tex> в <tex>t</tex> мощностью <tex>S_mT_K</tex> (см. рисунок 5.2). Сеть построена таким образом, называется расширенной сетью.
+
Для каждого <tex>I_K</tex> у нас есть такие расширения. Кроме того, мы сохраняем дуги из <tex>s</tex> в <tex>J_i</tex> емкостью <tex>p_i</tex> и дуги из <tex>I_K</tex> в <tex>t</tex> емкостью <tex>S_mT_K</tex> (см. рисунок 1).
  
 
{{Теорема
 
{{Теорема
Строка 39: Строка 35:
 
==Время работы==
 
==Время работы==
 
[[Файл:Figure_5.9.a.png|200px|thumb|right|Рис. 2.1]]
 
[[Файл:Figure_5.9.a.png|200px|thumb|right|Рис. 2.1]]
[[Файл:Figure_5.9.b.png|400px|thumb|right|Рис. 2.2]]
+
Из-за максимального потока в расширенной сети могут быть рассчитаны в <tex>O (m n^3)</tex> шагов, возможность проверки может быть сделано с такой же сложности. Для решения задачи <tex>Q|pmtn; r_{i}|L_{max}</tex> мы используем бинарный поиск. Получается алгоритм со сложностью <tex>O (mn^3(log(n) + log (\max\limits_{i=1}^{n} p_i)) </tex>, потому что <tex>L_{max}</tex>, ограничен <tex>n \max\limits_{i=1}^{n}p_i</tex>, при <tex>s_1 = 1</tex>.
Из-за максимального потока в расширенной сети могут быть рассчитаны в <tex>O (m n^3)</tex> шагов, возможность проверки может быть сделано с такой же сложности.
 
  
Для решения задачи <tex>Q|pmtn; r_{i}|L_{max}</tex> мы используем бинарный поиск. Это дает <tex>\varepsilon</tex>-приближении алгоритм со сложностью <tex>O (mn^3(log(n) + log(1 / \varepsilon) + log (\max\limits_{i=1}^{n} p_i)) </tex>, потому что <tex>L_{max}</tex>, ограничен <tex>n \max\limits_{i=1}^{n}p_i</tex>, при <tex>s_1 = 1</tex>.
+
<tex>Q | pmtn; ri | Cmax</tex> представляет собой частный случай <tex>Q | pmtn; ri | Lmax</tex>, и может быть решена более эффективно. Labetoulle, Lawler, Lenstra, and Rinnooy Kan разработали алгоритм работающий за <tex> O(n log(n) + mn) </tex> специально для этого случая.
 
+
{{Утверждение
Потому что (5.10) справедливо для всех К частичной работы с требования к
+
|statement= Задача <tex>Q | pmtn | Lmax</tex> может быть решена за <tex> O(n log(n) + mn) </tex> шагов.
обработке Xik могут быть запланированы в ИК с уровнем алгоритма.
+
|proof=
 
+
Решение <tex>Q | pmtn; ri | Cmax</tex> эквивалентно нахождению наименьшего  <tex>T \ge 0</tex>, такого, что задача с "временными окнами" <tex>[r_i, T] (i = 1, . . . , n)</tex> имеет решение.
Задача <tex>Q | pmtn; ri | Cmax</tex>, которая представляет собой частный случай <tex>Q | pmtn; ri | Lmax</tex>, может быть решена более эффективно. Labetoulle, Lawler, Lenstra, and Rinnooy Kan разработали алгоритм работающий за <tex> O(n log(n) + mn) </tex> специально для этого случая.
 
 
 
Задача <tex>Q | pmtn | Lmax</tex> может быть решена за <tex> O(n log(n) + mn) </tex> шагов. Это вытекает из следующих соображений:
 
 
 
Решение <tex>Q | pmtn; ri | Cmax</tex> эквивалентно нахождению наименьшего  
 
  <tex>T \ge 0</tex>, что проблема с временными окнами [г, т] (г = 1, ..., п)
 
имеет возможности решение.
 
 
 
С другой стороны, решение <tex>Q | pmtn | Lmax</tex> эквивалентно нахождению
 
такого наименьшего <tex>T \ge 0</tex>, что проблема с временными окнами
 
[0, D + T] или с временными окнами [-T, ди] имеет допустимое решение.
 
  
 +
С другой стороны, решение <tex>Q | pmtn | Lmax</tex> эквивалентно нахождению такого наименьшего <tex>T \ge 0</tex>, такого, что задача с "временными окнами" <tex>[0, d_i + T]</tex> или с "временными окнами" <tex>[−T, d_i]</tex> имеет решение.
 +
}}
 +
[[Файл:Figure_5.9.b.png|500px|thumb|right|Рис. 2.2]]
 
Таким образом, задачи <tex>Q | pmtn; ri | Cmax</tex> и <tex>Q | pmtn | Lmax</tex> симметричны.
 
Таким образом, задачи <tex>Q | pmtn; ri | Cmax</tex> и <tex>Q | pmtn | Lmax</tex> симметричны.

Версия 19:41, 22 мая 2012

Эта статья находится в разработке!


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

Рассмотрим задачу нахождения расписания со следующим свойством:

- Каждое задание имеет своё времени выпуска [math]r_i[/math] и срок завершения(дедлайн) [math]d_i[/math].

Алгоритм решения

Рис. 1

Применим бинарный поиск для общего решения задачи. Сведем задачу к поиску потока сети.

Пусть [math] t_1 \lt t_2 \lt ...\lt t_r [/math] упорядоченная последовательности всех значений [math]r_i[/math] и [math]d_i[/math].

Также определим [math] I_K := [t_{K-1}, t_K],\ T_K = t_K-t_{K-−1} [/math] для [math] K = 2,..., r [/math].

Далее мы расширяем сеть, показанную на рисунке 1 следующим образом:

[math]I_K[/math] - произвольный интервал узел на рисунке, обозначим через [math] J_{i_1}, J_{i_2}, . . . , J_{i_s} [/math] набор предшественников узла [math]I_K[/math]. Тогда замененная нами подсеть определяется как [math] I_K, J_{i_1}, J_{i_2}, . . . , J_{i_s} [/math], которая показана на рисунке 2.1; Расширение сети показано на рисунке 2.2.

Cчитаем, что машины индексируются в порядке невозрастания скоростей [math] s_1 \ge s_2 \ge . . . \ge s_m [/math], кроме того [math]s_{m+1} = 0[/math].

Расширенная подсеть строится путем добавления к вершинам [math] I_K, J_{i_1}, J_{i_2}, . . . , J_{i_s} [/math] вершин [math](K, 1), (K, 2), . . . (K, m) [/math]. При [math]j = 1,..., m [/math], есть дуги от [math](K, j)[/math] до [math]I_K[/math] с емкостью [math] j(s_j - s_{j+1}) T_K [/math] и для всех [math]ν = 1,. . . , s[/math] и [math]j = 1,. . ., m[/math] существует дуга из [math]J_{i_ν}[/math] в [math](K, J)[/math] с емкостью [math] (s_j - s_{j+1}) T_K [/math].

Для каждого [math]I_K[/math] у нас есть такие расширения. Кроме того, мы сохраняем дуги из [math]s[/math] в [math]J_i[/math] емкостью [math]p_i[/math] и дуги из [math]I_K[/math] в [math]t[/math] емкостью [math]S_mT_K[/math] (см. рисунок 1).

Теорема:
Следующие свойства эквивалентны:

(А) Существует допустимое расписание.

(Б) В расширенной сети существует поток от s до t со значением [math]\sum\limits_{i=1}^{n} p_i[/math]

Время работы

Рис. 2.1

Из-за максимального потока в расширенной сети могут быть рассчитаны в [math]O (m n^3)[/math] шагов, возможность проверки может быть сделано с такой же сложности. Для решения задачи [math]Q|pmtn; r_{i}|L_{max}[/math] мы используем бинарный поиск. Получается алгоритм со сложностью [math]O (mn^3(log(n) + log (\max\limits_{i=1}^{n} p_i)) [/math], потому что [math]L_{max}[/math], ограничен [math]n \max\limits_{i=1}^{n}p_i[/math], при [math]s_1 = 1[/math].

[math]Q | pmtn; ri | Cmax[/math] представляет собой частный случай [math]Q | pmtn; ri | Lmax[/math], и может быть решена более эффективно. Labetoulle, Lawler, Lenstra, and Rinnooy Kan разработали алгоритм работающий за [math] O(n log(n) + mn) [/math] специально для этого случая.

Утверждение:
Задача [math]Q | pmtn | Lmax[/math] может быть решена за [math] O(n log(n) + mn) [/math] шагов.
[math]\triangleright[/math]

Решение [math]Q | pmtn; ri | Cmax[/math] эквивалентно нахождению наименьшего [math]T \ge 0[/math], такого, что задача с "временными окнами" [math][r_i, T] (i = 1, . . . , n)[/math] имеет решение.

С другой стороны, решение [math]Q | pmtn | Lmax[/math] эквивалентно нахождению такого наименьшего [math]T \ge 0[/math], такого, что задача с "временными окнами" [math][0, d_i + T][/math] или с "временными окнами" [math][−T, d_i][/math] имеет решение.
[math]\triangleleft[/math]
Рис. 2.2

Таким образом, задачи [math]Q | pmtn; ri | Cmax[/math] и [math]Q | pmtn | Lmax[/math] симметричны.