<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=109.252.114.121&amp;*</id>
		<title>Викиконспекты - Вклад участника [ru]</title>
		<link rel="self" type="application/atom+xml" href="http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=109.252.114.121&amp;*"/>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/109.252.114.121"/>
		<updated>2026-05-01T02:38:10Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=QpmtnriLmax&amp;diff=72879</id>
		<title>QpmtnriLmax</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=QpmtnriLmax&amp;diff=72879"/>
				<updated>2020-03-10T16:45:55Z</updated>
		
		<summary type="html">&lt;p&gt;109.252.114.121: Исправлена опечатка&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;tex dpi = &amp;quot;200&amp;quot;&amp;gt;Q \mid pmtn, r_i \mid L_{max}&amp;lt;/tex&amp;gt;&lt;br /&gt;
{{Задача&lt;br /&gt;
|definition=Рассмотрим задачу на нахождение расписания:&lt;br /&gt;
# У нас есть несколько станков, работающих параллельно. У станков могут быть разные скорости выполнения работ.&lt;br /&gt;
# Есть несколько заданий, каждое имеет своё время появления &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; и время окончания &amp;lt;tex&amp;gt;d_i&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Работа может быть прервана в любой момент и продолжена позже на любой машине.&lt;br /&gt;
Требуется минимизировать максимальное опоздание &amp;lt;tex&amp;gt;L_{max} = \max\limits_i \{C_i - d_i\}&amp;lt;/tex&amp;gt;. &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Алгоритм==&lt;br /&gt;
===Алгоритм решения===&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Файл:Figure_5.2.png|500px|thumb|Рис. 1. Исходная сеть]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Файл:Figure_5.9.b.png|500px|thumb|Рис. 2. Расширение сети]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Как в [[PpmtnriLmax|задаче]] &amp;lt;tex&amp;gt;P \mid pmtn, r_i \mid L_{max}&amp;lt;/tex&amp;gt; применим метод [[Вещественный_двоичный_поиск|двоичного поиска]] и сведем задачу к &amp;lt;tex&amp;gt; Q \mid pmtn, r_i, d_i \mid - &amp;lt;/tex&amp;gt;. Для существования расписания с &amp;lt;tex&amp;gt; L_{max} \leqslant L^* &amp;lt;/tex&amp;gt; требуется, чтобы у работы с номером &amp;lt;tex&amp;gt; i &amp;lt;/tex&amp;gt; выполнялось &amp;lt;tex&amp;gt; C_i - d_i \leqslant L^* &amp;lt;/tex&amp;gt;, что эквивалентно &amp;lt;tex&amp;gt; C_i \leqslant d_i + L^* &amp;lt;/tex&amp;gt;. Опишем алгоритм решения &amp;lt;tex&amp;gt; Q \mid pmtn, r_i, d_i \mid - &amp;lt;/tex&amp;gt; при помощи сведения к задаче поиска [[Определение_сети,_потока|максимального потока]].&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt; t_1 \leqslant t_2 \leqslant ... \leqslant t_r &amp;lt;/tex&amp;gt; {{---}} упорядоченная последовательность всех значений &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;d_i + L^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Определим интервалы на исходной сети (Рис. 1) &amp;lt;tex&amp;gt; I_K := [t_{K-1}, t_K], \  T_K = t_K-t_{K−1} &amp;lt;/tex&amp;gt; для &amp;lt;tex&amp;gt; K = 2,..., r &amp;lt;/tex&amp;gt;. Cчитаем, что станки занумерованы в порядке невозрастания скоростей &amp;lt;tex&amp;gt; s_1 \geqslant s_2 \geqslant . . . \geqslant s_m &amp;lt;/tex&amp;gt; (также считаем &amp;lt;tex&amp;gt;s_{m+1} = 0&amp;lt;/tex&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Искомая сеть строится с помощью расширения сети из задачи &amp;lt;tex&amp;gt;P \mid pmtn, r_i \mid L_{max}&amp;lt;/tex&amp;gt;. Обозначим через &amp;lt;tex&amp;gt; J_{i_1}, J_{i_2}, . . . , J_{i_s} &amp;lt;/tex&amp;gt; набор предшественников узла &amp;lt;tex&amp;gt;I_K&amp;lt;/tex&amp;gt;, тогда замененная нами подсеть определяется как &amp;lt;tex&amp;gt; I_K, J_{i_1}, J_{i_2}, . . . , J_{i_s} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Расширение сети показано на Рис. 2.&lt;br /&gt;
&lt;br /&gt;
Расширенная подсеть строится путем добавления к вершинам &amp;lt;tex&amp;gt; I_K, J_{i_1}, J_{i_2}, . . . , J_{i_s} &amp;lt;/tex&amp;gt; вершин &amp;lt;tex&amp;gt;(K, 1), (K, 2), . . . (K, m) &amp;lt;/tex&amp;gt;. При &amp;lt;tex&amp;gt;j = 1,..., m &amp;lt;/tex&amp;gt;, есть дуги от &amp;lt;tex&amp;gt;(K, j)&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;I_K&amp;lt;/tex&amp;gt; с пропускной способностью &amp;lt;tex&amp;gt; j(s_j - s_{j+1}) T_K &amp;lt;/tex&amp;gt; и для всех &amp;lt;tex&amp;gt;\nu = 1,. . . , s&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;j = 1,. . ., m&amp;lt;/tex&amp;gt; существует дуга из &amp;lt;tex&amp;gt;J_{i_\nu}&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;(K, J)&amp;lt;/tex&amp;gt; с пропускной способностью &amp;lt;tex&amp;gt; (s_j - s_{j+1}) T_K &amp;lt;/tex&amp;gt;. Это выполняется для каждой вершины &amp;lt;tex&amp;gt;I_K&amp;lt;/tex&amp;gt;. Кроме того, мы сохраняем дуги из &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;J_i&amp;lt;/tex&amp;gt; пропускной способностью &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и дуги из &amp;lt;tex&amp;gt;I_K&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; пропускной способностью &amp;lt;tex&amp;gt;S_mT_K&amp;lt;/tex&amp;gt; (Рис. 1).&lt;br /&gt;
&lt;br /&gt;
===Корректность и оптимальность алгоритма===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Следующие утверждения эквивалентны:&lt;br /&gt;
:&amp;lt;tex&amp;gt;(a)&amp;lt;/tex&amp;gt; Существует допустимое расписание.&lt;br /&gt;
:&amp;lt;tex&amp;gt;(b)&amp;lt;/tex&amp;gt; В расширенной сети существует поток от &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; со значением &amp;lt;tex&amp;gt;\sum\limits_{i=1}^n p_i&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
|proof=&amp;lt;tex&amp;gt;(b) \Rightarrow (a)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:Рассмотрим в расширенной сети поток величиной &amp;lt;tex&amp;gt;\sum\limits_{i = 1}^n {p_i}&amp;lt;/tex&amp;gt;. Обозначим через &amp;lt;tex&amp;gt;x_{iK}&amp;lt;/tex&amp;gt; общий поток, который идет от &amp;lt;tex&amp;gt;J_i&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;I_K&amp;lt;/tex&amp;gt;. Заметим, что &amp;lt;tex&amp;gt;\sum\limits_{i = 1}^n \sum\limits_{K = 2}^r x_{iK} = \sum\limits_{i = 1}^n p_i&amp;lt;/tex&amp;gt;. Достаточно показать, что для каждого подмножества &amp;lt;tex&amp;gt;A \subseteq \{ 1, . . . , n \}&amp;lt;/tex&amp;gt; выполняется&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;tex&amp;gt;\sum\limits_{i \in A} x_{iK} \leqslant T_Kh(A)&amp;lt;/tex&amp;gt; ,где &amp;lt;tex&amp;gt;h(A) = &lt;br /&gt;
\begin{cases}&lt;br /&gt;
 S_{|A|}, &amp;amp; \text{if }|A| \leqslant m \\&lt;br /&gt;
 S_m, &amp;amp; \text{otherwise}&lt;br /&gt;
\end{cases} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
:Это означает, что условие &amp;lt;tex&amp;gt;\sum\limits_{i \in A} p_i \leqslant Th(A), \forall A \subseteq \{ 1, ... , n \}&amp;lt;/tex&amp;gt; выполняется  и требования к обработке &amp;lt;tex&amp;gt;x_{1K}, . . . , x_{nK}&amp;lt;/tex&amp;gt; могут быть запланированы как &amp;lt;tex&amp;gt;I_K&amp;lt;/tex&amp;gt; для &amp;lt;tex&amp;gt;K = 2, . . . , r&amp;lt;/tex&amp;gt;. Рассмотрим подсеть в расширенной сети в подмножестве &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; и соответствующие части потока. Фрагмент частичного потока, который проходит через &amp;lt;tex&amp;gt;(K, j)&amp;lt;/tex&amp;gt; ограничен&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;tex&amp;gt;\min \{ j(s_j −- s_{j + 1})T_K, |A|(s_j - s_{j+1})T_K \} = T_K(s_j - s_{j+1}) \min \{ j, |A| \}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
:Таким образом, мы имеем&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table align = center&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;\sum\limits_{i \in A} x_{iK} \geqslant T_K \sum\limits_{j = 1}^m(s_j −- s_{j+1}) \min \{ j, |A| \} = T_Kh(A)&amp;lt;/tex&amp;gt;. &amp;lt;tex&amp;gt;(*)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:То, что равенство &amp;lt;tex&amp;gt;(*)&amp;lt;/tex&amp;gt; справедливо, может рассматриваться как следствие. Если &amp;lt;tex&amp;gt;|A| &amp;gt; m&amp;lt;/tex&amp;gt;, то&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;tex&amp;gt;\sum\limits_{j = 1}^m \min \{ j, |A| \}(s_j - s_{j + 1}) = s_1 - s_2 + 2s_2 - 2s_3 + 3s_3 - 3s_4 + ... + ms_s - ms_{m+1} =\ &amp;lt;/tex&amp;gt;&lt;br /&gt;
:&amp;lt;tex&amp;gt;S_m = h(A)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
:В противном случае&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;tex&amp;gt;\sum\limits_{j = 1} \min \{ j, |A| \}(s_j - s_{j + 1}) = s_1 - s_2 + 2s_2 - 2s_3 + 3s_3 - ... + (|A| - 1)s_{|A| - 1} -\ &amp;lt;/tex&amp;gt;&lt;br /&gt;
:&amp;lt;tex&amp;gt;(|A| - 1)s_{|A|} + |A|(s_{|A|} - s_{|A| - 1} - ... - s_m + s_m - s_{m + 1}) = S_{|A|} = h(A)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;(a) \Rightarrow (b)&amp;lt;/tex&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
:Предположим, что допустимое расписание существует. Для &amp;lt;tex&amp;gt;i = 1, ... , n &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;K = 2, ..., r&amp;lt;/tex&amp;gt; пусть &amp;lt;tex&amp;gt;x_{iK}&amp;lt;/tex&amp;gt; является &amp;quot;объемом работ&amp;quot;, который будет выполняться в интервале &amp;lt;tex&amp;gt;I_K&amp;lt;/tex&amp;gt; в соответствии с нашим возможным расписанием. Тогда для всех &amp;lt;tex&amp;gt;K = 2, ..., r&amp;lt;/tex&amp;gt; и произвольных наборов &amp;lt;tex&amp;gt;A \subseteq \{ 1, . . . , n \}&amp;lt;/tex&amp;gt;, неравенство&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;table align = center&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;\sum\limits_{i \in A} x_{iK} \leqslant T_Kh(A)&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;(**)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
выполняется. Кроме того, для &amp;lt;tex&amp;gt;i = 1, . . . , n&amp;lt;/tex&amp;gt; у нас &amp;lt;tex&amp;gt;p_i = \sum\limits_{K = 2}^r s_{iK}&amp;lt;/tex&amp;gt;. Остается показать, что можно отправить &amp;lt;tex&amp;gt;x_{iK}&amp;lt;/tex&amp;gt; от &amp;lt;tex&amp;gt;J_i&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;I_K&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;(i = 1, . . . , n; K = 2, . . . , r)&amp;lt;/tex&amp;gt; в расширенной сети. Такой поток существует, если &amp;lt;tex&amp;gt;\forall A \subseteq \{ 1, . . . , n \}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;K = 2, . . . , r&amp;lt;/tex&amp;gt; значение &amp;lt;tex&amp;gt;\sum\limits_{i \in A} x_{iK}&amp;lt;/tex&amp;gt; ограничено величиной минимального разреза части сети с истоками &amp;lt;tex&amp;gt;J_i(i \in A)&amp;lt;/tex&amp;gt; и стоком &amp;lt;tex&amp;gt;I_K&amp;lt;/tex&amp;gt;. Тем не менее, это значение&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;T_K\sum\limits_{j = 1}^m \min \{ j, |A| \}(s_j - s_{j+1})&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Используя &amp;lt;tex&amp;gt;(**)&amp;lt;/tex&amp;gt; и правую часть &amp;lt;tex&amp;gt;(*)&amp;lt;/tex&amp;gt;, получаем&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\sum\limits_{i \in A} x_{iK} \leqslant T_K h(A) = T_K \sum\limits_{j = 1}^m \min \{ j, |A| \}(s_j - s_{j+1})&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
что и является искомым неравенством.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Время работы===&lt;br /&gt;
&lt;br /&gt;
Работа с максимальным потоком в расширенной сети занимает &amp;lt;tex&amp;gt;O (m n^3)&amp;lt;/tex&amp;gt; шагов, проверка может быть сделана с такой же скоростью. Для решения &amp;lt;tex&amp;gt;Q \mid pmtn; r_{i} \mid L_{max}&amp;lt;/tex&amp;gt; мы используем бинарный поиск, а значит, получаем алгоритм с &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-приближенной  сложностью &amp;lt;tex&amp;gt;O (mn^3(\log(n) + \log(1 / \varepsilon) + \log(\max\limits_{i=1}^{n} p_i)) &amp;lt;/tex&amp;gt;, потому как &amp;lt;tex&amp;gt;L_{max}&amp;lt;/tex&amp;gt;, ограничен &amp;lt;tex&amp;gt;n \max\limits_{i=1}^{n}p_i&amp;lt;/tex&amp;gt;, при &amp;lt;tex&amp;gt;s_1 = 1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Задача &amp;lt;tex&amp;gt;Q \mid pmtn; r_i \mid C_{max}&amp;lt;/tex&amp;gt; представляет собой частный случай &amp;lt;tex&amp;gt;Q \mid pmtn; r_i \mid L_{max}&amp;lt;/tex&amp;gt;, и может быть решена более эффективно&amp;lt;ref&amp;gt;Описано в Peter Brucker. «Scheduling Algorithms» {{---}} «Springer», 2006 г. {{---}} 133 стр.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Примечания==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
* Peter Brucker. «Scheduling Algorithms» {{---}} «Springer», 2006 г. {{---}} 129 {{---}} 133 стр. {{---}} ISBN 978-3-540-69515-8&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория расписаний]]&lt;/div&gt;</summary>
		<author><name>109.252.114.121</name></author>	</entry>

	</feed>