<?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=85.114.2.247&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=85.114.2.247&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/85.114.2.247"/>
		<updated>2026-05-10T12:47:09Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=1p1sumu&amp;diff=54957</id>
		<title>1p1sumu</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=1p1sumu&amp;diff=54957"/>
				<updated>2016-06-08T11:15:37Z</updated>
		
		<summary type="html">&lt;p&gt;85.114.2.247: /* Алгоритм */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;tex dpi = &amp;quot;200&amp;quot; &amp;gt;1 \mid p_i=1\mid \sum U_i&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Шаблон:Задача&lt;br /&gt;
|definition = &lt;br /&gt;
Дан один станок и &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; работ, для которых заданы их дедлайны &amp;lt;tex&amp;gt;d_i&amp;lt;/tex&amp;gt;, а все времена выполнения на этом станке &amp;lt;tex&amp;gt;p_i = 1&amp;lt;/tex&amp;gt;. Нужно успеть выполнить как можно больше работ.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Алгоритм==&lt;br /&gt;
Чтобы получить оптимальное расписание, будем строить максимальное множество &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; тех работ, которые успеют выполниться. Само расписание тогда будет состоять из всех работ из &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;, упорядоченных по неубыванию дедлайнов.&lt;br /&gt;
Будем добавлять в &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; работы в порядке неубывания значений &amp;lt;tex&amp;gt;d_j&amp;lt;/tex&amp;gt;, если успеваем их выполнить. &lt;br /&gt;
&lt;br /&gt;
 Отсортировать работы так, чтобы &amp;lt;tex&amp;gt;d_1 \leqslant d_2 \leqslant \dots \leqslant d_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
 &amp;lt;tex&amp;gt;S = \varnothing&amp;lt;/tex&amp;gt;&lt;br /&gt;
 &amp;lt;tex&amp;gt;time = 0&amp;lt;/tex&amp;gt;&lt;br /&gt;
 '''for''' i = 1 '''to''' n '''do'''&lt;br /&gt;
   &amp;lt;tex&amp;gt;d_i = \min\{d_i, n\}&amp;lt;/tex&amp;gt; &lt;br /&gt;
 '''for''' i = 1 '''to''' n '''do'''&lt;br /&gt;
   '''if''' &amp;lt;tex&amp;gt;time &amp;lt; d_i&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;S = S \cup \{ i \}&amp;lt;/tex&amp;gt;&lt;br /&gt;
   &amp;lt;tex&amp;gt;time&amp;lt;/tex&amp;gt; &amp;lt;code&amp;gt;+=&amp;lt;/code&amp;gt; &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
Cортировку работ по неубыванию дедлайнов осуществляем с помощью сортировки подсчетом за &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt;, а значит и весь алгоритм будет работать за &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt;. &lt;br /&gt;
Во время сортировки стоит учитывать, что дедлайны могут значительно превосходить количество задач. В таком случае необходимо предварительно пересчитать дедлайны по формуле &amp;lt;tex&amp;gt;d_i = \min\{d_i, n\}&amp;lt;/tex&amp;gt; (в оптимальном расписании мы не выполняем работы позже времени &amp;lt;tex&amp;gt;t=n&amp;lt;/tex&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
В результате выполнения данного алгоритма будет получено корректное расписание, в котором каждая работа встречается не более одного раза. Оптимальность полученного расписания доказывается аналогично [[1sumwu|&amp;lt;tex&amp;gt;1 \mid  \mid \sum w_{i}U_{i}&amp;lt;/tex&amp;gt;]].&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Классификация задач]]&lt;br /&gt;
* [[1sumu|&amp;lt;tex&amp;gt;1 \mid  \mid \sum U_{i}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[1sumwu|&amp;lt;tex&amp;gt;1 \mid  \mid \sum w_{i}U_{i}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
* Peter Brucker. «Scheduling Algorithms» {{---}} «Springer», 2006 г. {{---}} 86 стр. {{---}} ISBN 978-3-540-69515-8&lt;br /&gt;
&lt;br /&gt;
[[Категория: Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория: Теория расписаний]]&lt;/div&gt;</summary>
		<author><name>85.114.2.247</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=1p1sumu&amp;diff=54956</id>
		<title>1p1sumu</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=1p1sumu&amp;diff=54956"/>
				<updated>2016-06-08T11:05:48Z</updated>
		
		<summary type="html">&lt;p&gt;85.114.2.247: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;tex dpi = &amp;quot;200&amp;quot; &amp;gt;1 \mid p_i=1\mid \sum U_i&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Шаблон:Задача&lt;br /&gt;
|definition = &lt;br /&gt;
Дан один станок и &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; работ, для которых заданы их дедлайны &amp;lt;tex&amp;gt;d_i&amp;lt;/tex&amp;gt;, а все времена выполнения на этом станке &amp;lt;tex&amp;gt;p_i = 1&amp;lt;/tex&amp;gt;. Нужно успеть выполнить как можно больше работ.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Алгоритм==&lt;br /&gt;
Чтобы получить оптимальное расписание, будем строить максимальное множество &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; тех работ, которые успеют выполниться. Само расписание тогда будет состоять из всех работ из &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;, упорядоченных по неубыванию дедлайнов.&lt;br /&gt;
Будем добавлять в &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; работы в порядке неубывания значений &amp;lt;tex&amp;gt;d_j&amp;lt;/tex&amp;gt;, если успеваем их выполнить. &lt;br /&gt;
&lt;br /&gt;
 Отсортировать работы так, чтобы &amp;lt;tex&amp;gt;d_1 \leqslant d_2 \leqslant \dots \leqslant d_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
 &amp;lt;tex&amp;gt;S = \varnothing&amp;lt;/tex&amp;gt;&lt;br /&gt;
 &amp;lt;tex&amp;gt;time = 0&amp;lt;/tex&amp;gt;&lt;br /&gt;
 '''for''' i = 1 '''to''' n '''do'''&lt;br /&gt;
   '''if''' &amp;lt;tex&amp;gt;time &amp;lt; d_i&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;S = S \cup \{ i \}&amp;lt;/tex&amp;gt;&lt;br /&gt;
   &amp;lt;tex&amp;gt;time&amp;lt;/tex&amp;gt; &amp;lt;code&amp;gt;+=&amp;lt;/code&amp;gt; &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
Cортировку работ по неубыванию дедлайнов осуществляем с помощью сортировки подсчетом за &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt;, а значит и весь алгоритм будет работать за &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В результате выполнения данного алгоритма будет получено корректное расписание, в котором каждая работа встречается не более одного раза. Оптимальность полученного расписания доказывается аналогично [[1sumwu|&amp;lt;tex&amp;gt;1 \mid  \mid \sum w_{i}U_{i}&amp;lt;/tex&amp;gt;]].&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Классификация задач]]&lt;br /&gt;
* [[1sumu|&amp;lt;tex&amp;gt;1 \mid  \mid \sum U_{i}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[1sumwu|&amp;lt;tex&amp;gt;1 \mid  \mid \sum w_{i}U_{i}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
* Peter Brucker. «Scheduling Algorithms» {{---}} «Springer», 2006 г. {{---}} 86 стр. {{---}} ISBN 978-3-540-69515-8&lt;br /&gt;
&lt;br /&gt;
[[Категория: Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория: Теория расписаний]]&lt;/div&gt;</summary>
		<author><name>85.114.2.247</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%82%D0%BE%D0%B4%D1%8B_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B7%D0%B0%D0%B4%D0%B0%D1%87_%D1%82%D0%B5%D0%BE%D1%80%D0%B8%D0%B8_%D1%80%D0%B0%D1%81%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D0%B9&amp;diff=54955</id>
		<title>Методы решения задач теории расписаний</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%82%D0%BE%D0%B4%D1%8B_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B7%D0%B0%D0%B4%D0%B0%D1%87_%D1%82%D0%B5%D0%BE%D1%80%D0%B8%D0%B8_%D1%80%D0%B0%D1%81%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D0%B9&amp;diff=54955"/>
				<updated>2016-06-08T10:59:07Z</updated>
		
		<summary type="html">&lt;p&gt;85.114.2.247: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Сведение к другой задаче ==&lt;br /&gt;
При сведении текущей задачи теории расписаний &amp;lt;tex&amp;gt; S &amp;lt;/tex&amp;gt; к какой-то другой &amp;lt;tex&amp;gt; S' &amp;lt;/tex&amp;gt; (не обязательно задаче теории расписаний) необходимо доказать два пункта:&lt;br /&gt;
# Допустимость расписания, построенного с помощью задачи &amp;lt;tex&amp;gt; S' &amp;lt;/tex&amp;gt;, или существование способа его трансформации в допустимое без нарушения оптимальности.&lt;br /&gt;
# Следствие того, что если мы оптимизируем &amp;lt;tex&amp;gt; S' &amp;lt;/tex&amp;gt;, мы также оптимизируем ответ для &amp;lt;tex&amp;gt; S &amp;lt;/tex&amp;gt;.&lt;br /&gt;
'''Примечание''': если требуется полиномиальное время для решения задачи, сведение к другой задаче и трансформация расписания в допустимое также должны происходить за полиномиальное время.&lt;br /&gt;
&lt;br /&gt;
С помощью этого метода решаются:&lt;br /&gt;
* Задачи класса [[Классификация задач|Open Shop]] при условии &amp;lt;tex&amp;gt;p_{ij}=1&amp;lt;/tex&amp;gt; можно свести к задачам равной длительности на параллельных станках:&lt;br /&gt;
*:[[Opij1Sumwc|&amp;lt;tex&amp;gt; O \mid p_{ij} = 1 \mid \sum w_i C_i &amp;lt;/tex&amp;gt;]]&lt;br /&gt;
*:&amp;lt;tex&amp;gt; O \mid p_{ij} = 1, r_i \mid C_{max} &amp;lt;/tex&amp;gt; &amp;lt;ref&amp;gt;Peter Brucker «Scheduling Algorithms», fifth edition, Springer — с. 161&amp;lt;/ref&amp;gt;&lt;br /&gt;
* Задачи класса [[Классификация задач|Flow Shop]] при условии &amp;lt;tex&amp;gt;p_{ij}=1&amp;lt;/tex&amp;gt; можно свести к задаче на одном станке:&lt;br /&gt;
*:[[Fpij1sumwu|&amp;lt;tex&amp;gt; F \mid p_{ij} = 1 \mid \sum w_i U_i &amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* Часто в задачах, в которых допускаются прерывания, оптимальный ответ совпадает с соответствующими задачами без прерываний:&lt;br /&gt;
*:&amp;lt;tex&amp;gt; P \mid pmtn \mid \sum w_i C_i &amp;lt;/tex&amp;gt; &amp;lt;ref&amp;gt;Peter Brucker «Scheduling Algorithms», fifth edition, Springer — с. 121&amp;lt;/ref&amp;gt;&lt;br /&gt;
*:[[Flow shop|&amp;lt;tex&amp;gt; F2 \mid pmtn \mid C_{max} &amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* Ряд задач можно свести к задаче поиска максимального потока:&lt;br /&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», fifth edition, Springer — с. 129-133&amp;lt;/ref&amp;gt;&lt;br /&gt;
*:[[RSumCi|&amp;lt;tex&amp;gt; R \mid \mid \sum C_i &amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* Некоторые задачи сводятся к другим похожим задачам теории расписаний путем преобразования их расписаний:&lt;br /&gt;
*:[[1outtreesumwc|&amp;lt;tex&amp;gt; 1 \mid intree \mid \sum w_i C_i &amp;lt;/tex&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
== Построение расписания по нижней оценке ==&lt;br /&gt;
Этот метод обычно применим к задачам, в которых целевая функция — &amp;lt;tex&amp;gt; C_{max}&amp;lt;/tex&amp;gt;. &lt;br /&gt;
Обычно построение расписания по нижней оценке происходит в два этапа:&lt;br /&gt;
# Построение некоторого набора нижних ограничений на произвольное расписание для задачи &amp;lt;tex&amp;gt; S &amp;lt;/tex&amp;gt;. &lt;br /&gt;
# Построение произвольного допустимого расписания, достигающего максимального ограничения из построенного набора.&lt;br /&gt;
&lt;br /&gt;
С помощью этого метода решаются следующие задачи:&lt;br /&gt;
* &amp;lt;tex&amp;gt; P \mid pmtn \mid C_{max}&amp;lt;/tex&amp;gt; &amp;lt;ref&amp;gt;Peter Brucker «Scheduling Algorithms», fifth edition, Springer — с. 108&amp;lt;/ref&amp;gt;&lt;br /&gt;
* [[RpmtnCmax|&amp;lt;tex&amp;gt; R \mid pmtn \mid C_{max}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[Opij1Cmax|&amp;lt;tex&amp;gt; O \mid p_{ij}=1 \mid C_{max}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[QpmtnCmax|&amp;lt;tex&amp;gt; Q \mid pmtn \mid C_{max}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
Ниже будет рассмотрен частный пример решения задачи подобным образом:&lt;br /&gt;
=== P | pmtn | C_max ===&lt;br /&gt;
{{Задача&lt;br /&gt;
|definition = Имеется &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; однородных машин, работающих параллельно, и &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; работ, которые могут быть прерваны и продолжены позже. Необходимо минимизировать время выполнения всех работ&lt;br /&gt;
}} &lt;br /&gt;
Найдем набор ограничений на значение &amp;lt;tex&amp;gt; C_{max} &amp;lt;/tex&amp;gt; для произвольного допустимого расписания &amp;lt;tex&amp;gt; S &amp;lt;/tex&amp;gt; : &lt;br /&gt;
# В допустимом расписании выполнение всех работ не может завершиться раньше одной из них, поэтому &amp;lt;tex&amp;gt; C_{max} \geqslant p_i &amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Если все станки работали время &amp;lt;tex&amp;gt; C_{max} &amp;lt;/tex&amp;gt;, на них могло выполниться не больше &amp;lt;tex&amp;gt; C_{max} \cdot m &amp;lt;/tex&amp;gt; работы, то есть &amp;lt;tex&amp;gt; \sum\limits_{i=1}^n p_i \leqslant C_{max} \cdot m &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; C_{max} \geqslant \dfrac1m \sum\limits_{i=1}^n p_i &amp;lt;/tex&amp;gt;.&lt;br /&gt;
Из этих ограничений следует, что &amp;lt;tex&amp;gt; C_{max} = \max {\left( \max\limits_{i=1 \hdots n} p_i,~ \dfrac1m \sum\limits_{i=1}^n p_i \right)} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Построим расписание, подходящее под эту границу: будем по очереди заполнять машины работами в произвольном порядке, и если очередная работа не помещается на текущей машине полностью, перенесем ее выходящую за &amp;lt;tex&amp;gt; C_{max} &amp;lt;/tex&amp;gt; часть на следующую машину. Благодаря первому ограничению никакая работа не будет выполняться одновременно на двух станках, а благодаря второму — не останется работы, которую мы не сможем выполнить.&lt;br /&gt;
&lt;br /&gt;
== Бинарный поиск по ответу ==&lt;br /&gt;
Этот способ часто подходит для задач, в которых надо минимизировать &amp;lt;tex&amp;gt;C_{max} &amp;lt;/tex&amp;gt; (если мы умеем решать соответствующую задачу существования расписания), реже для &amp;lt;tex&amp;gt; \sum w_i U_i &amp;lt;/tex&amp;gt;. Важно помнить, что если требуется полиномиальное по &amp;lt;tex&amp;gt; n &amp;lt;/tex&amp;gt; решение, оно не должно зависеть от логарифма ответа, но иногда ответ ограничен полиномом от &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;, и мы можем применить этот метод.&lt;br /&gt;
&lt;br /&gt;
Примером решения задач подобным методом служит следующая задача:&lt;br /&gt;
[[QpmtnriLmax|&amp;lt;tex&amp;gt; Q \mid pmtn, r_i \mid L_{max} &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; 1 \mid prec \mid f_{max} &amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[1outtreesumwc|&amp;lt;tex&amp;gt; 1 \mid outtree \mid \sum w_i C_i &amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[1pi1sumwu|&amp;lt;tex&amp;gt; 1 \mid p_i = 1 \mid \sum w_i U_i &amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[1sumu|&amp;lt;tex&amp;gt; 1 \mid \mid \sum U_i &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; S &amp;lt;/tex&amp;gt;. Атомарными изменениями в этом решении &amp;lt;tex&amp;gt; S &amp;lt;/tex&amp;gt; будем получать другие допустимые решения &amp;lt;tex&amp;gt; S' &amp;lt;/tex&amp;gt; и докажем, что &amp;lt;tex&amp;gt; f(S) \leqslant f(S') &amp;lt;/tex&amp;gt;. Тогда решение &amp;lt;tex&amp;gt; S &amp;lt;/tex&amp;gt; — оптимально.&lt;br /&gt;
&lt;br /&gt;
Проблема в этих рассуждениях в том, что ими мы доказываем локальную оптимальность алгоритма в решении &amp;lt;tex&amp;gt; S &amp;lt;/tex&amp;gt;. Получение же глобального минимума может потребовать нескольких атомарных изменений в расписании, поэтому доказать оптимальность таким образом в общем случае невозможно. Как ближайшую аналогию, можно привести '''неправильное''' утверждение для произвольной функции &amp;lt;tex&amp;gt; f(\bar x) &amp;lt;/tex&amp;gt; — «если все частные производные &amp;lt;tex&amp;gt; \dfrac{\partial f}{\partial x_1} \dots \dfrac{\partial f}{\partial x_n} &amp;lt;/tex&amp;gt; неотрицательны, то в точке &amp;lt;tex&amp;gt; \bar x &amp;lt;/tex&amp;gt; наблюдается глобальный минимум».&lt;br /&gt;
&lt;br /&gt;
=== Правильно ===&lt;br /&gt;
При доказательстве оптимательности применима стратегия '''аргумент замены''' (англ. ''exchange argument''). Стратегия заключается в рассмотрении текущего решения &amp;lt;tex&amp;gt; S &amp;lt;/tex&amp;gt; и оптимального решения &amp;lt;tex&amp;gt; O &amp;lt;/tex&amp;gt;. Далее предлагается способ модификации &amp;lt;tex&amp;gt; O &amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt; O'&amp;lt;/tex&amp;gt; так, что:&lt;br /&gt;
# &amp;lt;tex&amp;gt; f(O') \leqslant f(O) &amp;lt;/tex&amp;gt;, то есть &amp;lt;tex&amp;gt; O' &amp;lt;/tex&amp;gt; также оптимально.&lt;br /&gt;
# &amp;lt;tex&amp;gt; O' &amp;lt;/tex&amp;gt; «более похоже» на &amp;lt;tex&amp;gt; S &amp;lt;/tex&amp;gt;, чем на &amp;lt;tex&amp;gt; O &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если такой способ найден, получаем, что какой-то последовательностью модификаций &amp;lt;tex&amp;gt; O \to O_t' \to \dots \to O_1' \to S &amp;lt;/tex&amp;gt; получим &amp;lt;tex&amp;gt; f(S) \leqslant f(O_1') \leqslant \dots \leqslant f(O_t') \leqslant f(O) &amp;lt;/tex&amp;gt;, из чего следует оптимальность &amp;lt;tex&amp;gt; S &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Отношение «более похоже» должно быть [[Отношение порядка | отношением частичного строгого порядка]]. Часто в качестве него можно выбрать отношение «длина наибольшего общего префикса решения &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; S &amp;lt;/tex&amp;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; S &amp;lt;/tex&amp;gt;. Можно выбирать и более сложные отношения, например, в доказательстве оптимальности алгоритма &amp;lt;tex&amp;gt; P \mid \mid \sum w_i C_i &amp;lt;/tex&amp;gt; для решения задачи &amp;lt;tex&amp;gt; P \mid pmtn \mid \sum w_i C_i &amp;lt;/tex&amp;gt; используется отношение «время последнего прерывания больше или количество прерываний меньше».&lt;br /&gt;
&lt;br /&gt;
== См. также. ==&lt;br /&gt;
* [[Правило Лаулера]]&lt;br /&gt;
* [[Flow shop]]&lt;br /&gt;
* [[Opi1sumu|&amp;lt;tex&amp;gt; O \mid p_{ij} = 1 \mid \sum U_i&amp;lt;/tex&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», fifth edition, Springer ISBN 978-3-540-69515-8&lt;br /&gt;
&lt;br /&gt;
[[Категория: Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория: Теория расписаний]]&lt;/div&gt;</summary>
		<author><name>85.114.2.247</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=RpmtnCmax&amp;diff=54954</id>
		<title>RpmtnCmax</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=RpmtnCmax&amp;diff=54954"/>
				<updated>2016-06-08T10:55:46Z</updated>
		
		<summary type="html">&lt;p&gt;85.114.2.247: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;tex dpi = &amp;quot;200&amp;quot; &amp;gt;R \mid pmtn \mid C_{max}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Задача&lt;br /&gt;
|definition = &lt;br /&gt;
Имеется &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; машин, работающих параллельно. Есть &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; работ, причем для каждого станка длительность выполнения на нем &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;-й работы  составляет &amp;lt;tex&amp;gt; p_{ij} &amp;lt;/tex&amp;gt;. Работа может быть прервана и продолжена позже.&lt;br /&gt;
&lt;br /&gt;
Необходимо составить такое расписание, чтобы значение &amp;lt;tex&amp;gt;C_{max} = \max\limits_{i=1\ldots n} C_i&amp;lt;/tex&amp;gt; было минимальным.}}&lt;br /&gt;
&lt;br /&gt;
==Алгоритм==&lt;br /&gt;
&lt;br /&gt;
Будет строить расписание по нижней оценке. &lt;br /&gt;
&lt;br /&gt;
Вычислим для каждой работы время &amp;lt;tex&amp;gt;t_{ij}&amp;lt;/tex&amp;gt;, которое работа &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; будет выполняться на &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt;-ом станке в оптимальном расписании.&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;\dfrac {t_{ij} } {p_{ij}} &amp;lt;/tex&amp;gt; {{---}} часть времени, которое  работа &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; будет выполняться на &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt;-ом станке. Тогда &amp;lt;tex&amp;gt; \sum\limits_{j=1}^m \dfrac {t_{ij} } {p_{ij}} = 1&amp;lt;/tex&amp;gt; верно, если работа завершена.&lt;br /&gt;
&lt;br /&gt;
Теперь оптимальное расписание должно удовлетворять следующим условиям:&lt;br /&gt;
# &amp;lt;tex&amp;gt; \sum\limits_{j=1}^m \dfrac {t_{ij} } {p_{ij}} = 1, \quad i = 1,\ldots, n&amp;lt;/tex&amp;gt;&lt;br /&gt;
# &amp;lt;tex&amp;gt; \sum\limits_{j=1}^m t_{ij} \leqslant C_{max},  \quad i = 1,\ldots, n&amp;lt;/tex&amp;gt;&lt;br /&gt;
# &amp;lt;tex&amp;gt; \sum\limits_{i=1}^n t_{ij} \leqslant C_{max},  \quad j = 1,\ldots, m&amp;lt;/tex&amp;gt;&lt;br /&gt;
# &amp;lt;tex&amp;gt; t_{ij} \geqslant 0,  \quad i = 1,\ldots, n;  j = 1,\ldots, m&amp;lt;/tex&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Обозначим нижнюю оценку как &amp;lt;tex&amp;gt;LB = \max\{\max\limits_{i=1}^n \sum\limits_{j=1}^m t_{ij}, \sum\limits_{i=1}^n t_{ij}\} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Можем получить ответ на задачу за &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt;. Расписание, удовлетворяющее этой оценке строится аналогично &amp;lt;tex&amp;gt;O \mid pmtn \mid C_{max}&amp;lt;/tex&amp;gt; &amp;lt;ref&amp;gt;Peter Brucker «Scheduling Algorithms», fifth edition, Springer — с. 15-17&amp;lt;/ref&amp;gt; за полиномиальное время.&lt;br /&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;]]&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 г. {{---}} 137-139 стр. {{---}} ISBN 978-3-540-69515-8&lt;br /&gt;
&lt;br /&gt;
[[Категория: Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория: Теория расписаний]]&lt;/div&gt;</summary>
		<author><name>85.114.2.247</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=RpmtnCmax&amp;diff=54953</id>
		<title>RpmtnCmax</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=RpmtnCmax&amp;diff=54953"/>
				<updated>2016-06-08T10:50:56Z</updated>
		
		<summary type="html">&lt;p&gt;85.114.2.247: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;tex dpi = &amp;quot;200&amp;quot; &amp;gt;R \mid pmtn \mid C_{max}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Задача&lt;br /&gt;
|definition = &lt;br /&gt;
Имеется &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; машин, работающих параллельно. Есть &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; работ, причем для каждого станка длительность выполнения на нем &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;-й работы  составляет &amp;lt;tex&amp;gt; p_{ij} &amp;lt;/tex&amp;gt;. Работа может быть прервана и продолжена позже.&lt;br /&gt;
&lt;br /&gt;
Необходимо составить такое расписание, чтобы значение &amp;lt;tex&amp;gt;C_{max} = \max\limits_{i=1\ldots n} C_i&amp;lt;/tex&amp;gt; было минимальным.}}&lt;br /&gt;
&lt;br /&gt;
==Алгоритм==&lt;br /&gt;
&lt;br /&gt;
Будет строить расписание по нижней оценке. &lt;br /&gt;
&lt;br /&gt;
Вычислим для каждой работы время &amp;lt;tex&amp;gt;t_{ij}&amp;lt;/tex&amp;gt;, которое работа &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; будет выполняться на &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt;-ом станке в оптимальном расписании.&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;t_{ij}/p_{ij}&amp;lt;/tex&amp;gt; {{---}} часть времени, которое  работа &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; будет выполняться на &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt;-ом станке. Тогда &amp;lt;tex&amp;gt; \sum\limits_{j=1}^m t_{ij}/p_{ij} = 1&amp;lt;/tex&amp;gt; верно, если работа завершена.&lt;br /&gt;
&lt;br /&gt;
Теперь оптимальное расписание должно удовлетворять следующим условиям:&lt;br /&gt;
# &amp;lt;tex&amp;gt; \sum\limits_{j=1}^m t_{ij}/p_{ij} = 1, \quad i = 1,\ldots, n&amp;lt;/tex&amp;gt;&lt;br /&gt;
# &amp;lt;tex&amp;gt; \sum\limits_{j=1}^m t_{ij} \leqslant C_{max},  \quad i = 1,\ldots, n&amp;lt;/tex&amp;gt;&lt;br /&gt;
# &amp;lt;tex&amp;gt; \sum\limits_{i=1}^n t_{ij} \leqslant C_{max},  \quad j = 1,\ldots, m&amp;lt;/tex&amp;gt;&lt;br /&gt;
# &amp;lt;tex&amp;gt; t_{ij} \geqslant 0,  \quad i = 1,\ldots, n;  j = 1,\ldots, m&amp;lt;/tex&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Обозначим нижнюю оценку как &amp;lt;tex&amp;gt;LB = \max\{\max\limits_{i=1}^n \sum\limits_{j=1}^m t_{ij}, \sum\limits_{i=1}^n t_{ij}\} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Можем получить ответ на задачу за &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt;. Расписание, удовлетворяющее этой оценке строится аналогично &amp;lt;tex&amp;gt;O \mid pmtn \mid C_{max}&amp;lt;/tex&amp;gt; &amp;lt;ref&amp;gt;Peter Brucker «Scheduling Algorithms», fifth edition, Springer — с. 15-17&amp;lt;/ref&amp;gt; за полиномиальное время.&lt;br /&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;]]&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 г. {{---}} 137-139 стр. {{---}} ISBN 978-3-540-69515-8&lt;br /&gt;
&lt;br /&gt;
[[Категория: Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория: Теория расписаний]]&lt;/div&gt;</summary>
		<author><name>85.114.2.247</name></author>	</entry>

	</feed>