<?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=217.118.78.115&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=217.118.78.115&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/217.118.78.115"/>
		<updated>2026-05-18T19:45:27Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=QpmtnCmax&amp;diff=24661</id>
		<title>QpmtnCmax</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=QpmtnCmax&amp;diff=24661"/>
				<updated>2012-06-09T19:38:14Z</updated>
		
		<summary type="html">&lt;p&gt;217.118.78.115: /* Алгоритм построения расписания */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;background-color: #ABCDEF; font-size: 16px; font-weight: bold; color: #000000; text-align: center; padding: 4px; border-style: solid; border-width: 1px;&amp;quot;&amp;gt;Эта статья находится в разработке!&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;includeonly&amp;gt;[[Категория: В разработке]]&amp;lt;/includeonly&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Постановка задачи==&lt;br /&gt;
Есть несколько станков с разной скоростью выполнения работ. Работу на каждом из станков можно прервать и продолжить позже. &lt;br /&gt;
&lt;br /&gt;
Цель - выполнить все как можно быстрее.&lt;br /&gt;
&lt;br /&gt;
1. Найдем нижнюю границу времени выполнения.&lt;br /&gt;
&lt;br /&gt;
2. Составим оптимальное расписание.&lt;br /&gt;
&lt;br /&gt;
==Алгоритм построения расписания==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; P_i = p_1 + ... + p_i&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; S_j = s_1 + ... + s_j&amp;lt;/tex&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;j = 1 ... m&amp;lt;/tex&amp;gt;; &amp;lt;tex&amp;gt; p_i&amp;lt;/tex&amp;gt; - вес i-ой работы ;&amp;lt;tex&amp;gt; s_j&amp;lt;/tex&amp;gt; - скорость работы j-oй машины ; &amp;lt;tex&amp;gt; n \ge m&amp;lt;/tex&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
Необходимое условие для выполнения всех работ в интервале &amp;lt;tex&amp;gt;[0;T]&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; P_n = p_1 + ... + p_n \le s_1T + ... + s_mT = S_mT&amp;lt;/tex&amp;gt; или  &amp;lt;tex&amp;gt;P_n/S_m \le T&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;
&amp;lt;tex&amp;gt;w = \max&amp;lt;/tex&amp;gt;{&amp;lt;tex&amp;gt;\max\limits_{j=1}^{m-1} P_i/S_j, P_n/S_m&amp;lt;/tex&amp;gt;}&lt;br /&gt;
&lt;br /&gt;
Будем назвать Level-ом работы &amp;lt;tex&amp;gt; lvl(p_i(t)) &amp;lt;/tex&amp;gt; - невыполненную часть работы &amp;lt;tex&amp;gt; p_i &amp;lt;/tex&amp;gt; в момент времени &amp;lt;tex&amp;gt; t &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Далее построим расписание, которое достигает нашей оценки &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;, с помощью Level-алгоритма.&lt;br /&gt;
&lt;br /&gt;
Level - алгоритм:&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;tex&amp;gt;t \leftarrow 0 &amp;lt;/tex&amp;gt;&lt;br /&gt;
   '''WHILE''' существуют работы с положительным level&lt;br /&gt;
       Assign(t)&lt;br /&gt;
       &amp;lt;tex&amp;gt;t1 \leftarrow min(s&amp;gt;t |&amp;lt;/tex&amp;gt;работа выполненная в момент времени &amp;lt;tex&amp;gt; s)&amp;lt;/tex&amp;gt;&lt;br /&gt;
       &amp;lt;tex&amp;gt;t2 \leftarrow min(s&amp;gt;t | p_i(t)&amp;gt;p_j(t)&amp;lt;/tex&amp;gt; &amp;amp;&amp;amp; &amp;lt;tex&amp;gt;  p_i(s) == p_j(s))&amp;lt;/tex&amp;gt;&lt;br /&gt;
       &amp;lt;tex&amp;gt; t \leftarrow min(t1,t2) &amp;lt;/tex&amp;gt;&lt;br /&gt;
   Построение расписания&lt;br /&gt;
&lt;br /&gt;
Функция &amp;lt;tex&amp;gt;Assign(t)&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;tex&amp;gt;J = &amp;lt;/tex&amp;gt;{&amp;lt;tex&amp;gt;i|p_i(t)&amp;gt;0&amp;lt;/tex&amp;gt;}&lt;br /&gt;
   &amp;lt;tex&amp;gt;M = &amp;lt;/tex&amp;gt;{&amp;lt;tex&amp;gt;M_1,...,M_m&amp;lt;/tex&amp;gt;}&lt;br /&gt;
   '''WHILE''' (&amp;lt;tex&amp;gt;J&amp;lt;/tex&amp;gt; != 0 &amp;amp;&amp;amp; &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; != 0)&lt;br /&gt;
      Найти множество работ &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt; подмножество &amp;lt;tex&amp;gt;J&amp;lt;/tex&amp;gt; ,level которых максимальный&lt;br /&gt;
      &amp;lt;tex&amp;gt;r \leftarrow min&amp;lt;/tex&amp;gt;(|&amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;|,|&amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;|)&lt;br /&gt;
      Назначаем работы из мн-ва &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt; самых быстрых машин из мн-ва &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;&lt;br /&gt;
      &amp;lt;tex&amp;gt;J \leftarrow J&amp;lt;/tex&amp;gt;\&amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;&lt;br /&gt;
      удаляем из мн-ва &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt; самых быстрых машин&lt;br /&gt;
&lt;br /&gt;
==Пример==&lt;br /&gt;
[[Файл:qptmncmax.png|400px|thumb|right|Картинка к примеру]]&lt;br /&gt;
&lt;br /&gt;
Пусть у нас есть 5 работ и 4 станка. Покажем работу алгоритма для данного случая.&lt;br /&gt;
&lt;br /&gt;
В начальный момент времени начинаем обрабатывать работы с наибольшим временем выполнения &amp;lt;tex&amp;gt;J_1-J_4&amp;lt;/tex&amp;gt; на станках &amp;lt;tex&amp;gt;M_1-M_4&amp;lt;/tex&amp;gt; соответственно. В момент времени &amp;lt;tex&amp;gt;t_1&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;lvl&amp;lt;/tex&amp;gt; 4-ой работы опускается до времени выполнения 5-ой работы. С этого момента начинаем обрабатывать работы &amp;lt;tex&amp;gt; J_4,J_5&amp;lt;/tex&amp;gt; на одном станке: &amp;lt;tex&amp;gt;M_4&amp;lt;/tex&amp;gt;. В момент времени &amp;lt;tex&amp;gt;t_2&amp;lt;/tex&amp;gt; происходит похожая ситуация. С этого момента времени работы &amp;lt;tex&amp;gt; J_1,J_2&amp;lt;/tex&amp;gt; выполняются синхронно на двух станках &amp;lt;tex&amp;gt; M_1,M_2&amp;lt;/tex&amp;gt;. Далее работы не пересекаются друг с другом и каждая заканчивается на ранее выделенных им станках.&lt;br /&gt;
&lt;br /&gt;
==Время работы==&lt;br /&gt;
Level-алгоритм вызывает функцию Assign(t) в самом худшем случае &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; раз. Функция Assign(t) выполняется за &amp;lt;tex&amp;gt;O(nm)&amp;lt;/tex&amp;gt;. Итоговое время работы &amp;lt;tex&amp;gt;O(n^2m)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Литература==&lt;br /&gt;
* Peter Brucker. «Scheduling Algorithms» {{---}} «Springer», 2006 г. {{---}} 379 стр. {{---}} ISBN 978-3-540-69515-8&lt;/div&gt;</summary>
		<author><name>217.118.78.115</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=QpmtnCmax&amp;diff=24659</id>
		<title>QpmtnCmax</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=QpmtnCmax&amp;diff=24659"/>
				<updated>2012-06-09T19:30:33Z</updated>
		
		<summary type="html">&lt;p&gt;217.118.78.115: /* Алгоритм построения расписания */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;background-color: #ABCDEF; font-size: 16px; font-weight: bold; color: #000000; text-align: center; padding: 4px; border-style: solid; border-width: 1px;&amp;quot;&amp;gt;Эта статья находится в разработке!&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;includeonly&amp;gt;[[Категория: В разработке]]&amp;lt;/includeonly&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Постановка задачи==&lt;br /&gt;
Есть несколько станков с разной скоростью выполнения работ. Работу на каждом из станков можно прервать и продолжить позже. &lt;br /&gt;
&lt;br /&gt;
Цель - выполнить все как можно быстрее.&lt;br /&gt;
&lt;br /&gt;
1. Найдем нижнюю границу времени выполнения.&lt;br /&gt;
&lt;br /&gt;
2. Составим оптимальное расписание.&lt;br /&gt;
&lt;br /&gt;
==Алгоритм построения расписания==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; P_i = p_1 + ... + p_i&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; S_j = s_1 + ... + s_j&amp;lt;/tex&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;j = 1 ... m&amp;lt;/tex&amp;gt;; &amp;lt;tex&amp;gt; p_i&amp;lt;/tex&amp;gt; - вес i-ой работы ;&amp;lt;tex&amp;gt; s_j&amp;lt;/tex&amp;gt; - скорость работы j-oй машины ; &amp;lt;tex&amp;gt; n \ge m&amp;lt;/tex&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
Необходимое условие для выполнения всех работ в интервале &amp;lt;tex&amp;gt;[0;T]&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; P_n = p_1 + ... + p_n \le s_1T + ... + s_mT = S_mT&amp;lt;/tex&amp;gt; или  &amp;lt;tex&amp;gt;P_n/S_m \le T&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;
&amp;lt;tex&amp;gt;w = \max&amp;lt;/tex&amp;gt;{&amp;lt;tex&amp;gt;\max\limits_{j=1}^{m-1} P_i/S_j, P_n/S_m&amp;lt;/tex&amp;gt;}&lt;br /&gt;
&lt;br /&gt;
Далее построим расписание, которое достигает нашей оценки &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;, с помощью Level-алгоритма.&lt;br /&gt;
&lt;br /&gt;
Level - алгоритм:&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;tex&amp;gt;t \leftarrow 0 &amp;lt;/tex&amp;gt;&lt;br /&gt;
   '''WHILE''' существуют работы с положительным level&lt;br /&gt;
       Assign(t)&lt;br /&gt;
       &amp;lt;tex&amp;gt;t1 \leftarrow min(s&amp;gt;t |&amp;lt;/tex&amp;gt;работа выполненная в момент времени &amp;lt;tex&amp;gt; s)&amp;lt;/tex&amp;gt;&lt;br /&gt;
       &amp;lt;tex&amp;gt;t2 \leftarrow min(s&amp;gt;t | p_i(t)&amp;gt;p_j(t)&amp;lt;/tex&amp;gt; &amp;amp;&amp;amp; &amp;lt;tex&amp;gt;  p_i(s) == p_j(s))&amp;lt;/tex&amp;gt;&lt;br /&gt;
       &amp;lt;tex&amp;gt; t \leftarrow min(t1,t2) &amp;lt;/tex&amp;gt;&lt;br /&gt;
   Построение расписания&lt;br /&gt;
&lt;br /&gt;
Функция &amp;lt;tex&amp;gt;Assign(t)&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;tex&amp;gt;J = &amp;lt;/tex&amp;gt;{&amp;lt;tex&amp;gt;i|p_i(t)&amp;gt;0&amp;lt;/tex&amp;gt;}&lt;br /&gt;
   &amp;lt;tex&amp;gt;M = &amp;lt;/tex&amp;gt;{&amp;lt;tex&amp;gt;M_1,...,M_m&amp;lt;/tex&amp;gt;}&lt;br /&gt;
   '''WHILE''' (&amp;lt;tex&amp;gt;J&amp;lt;/tex&amp;gt; != 0 &amp;amp;&amp;amp; &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; != 0)&lt;br /&gt;
      Найти множество работ &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt; подмножество &amp;lt;tex&amp;gt;J&amp;lt;/tex&amp;gt; ,level которых максимальный&lt;br /&gt;
      &amp;lt;tex&amp;gt;r \leftarrow min&amp;lt;/tex&amp;gt;(|&amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;|,|&amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;|)&lt;br /&gt;
      Назначаем работы из мн-ва &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt; самых быстрых машин из мн-ва &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;&lt;br /&gt;
      &amp;lt;tex&amp;gt;J \leftarrow J&amp;lt;/tex&amp;gt;\&amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;&lt;br /&gt;
      удаляем из мн-ва &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt; самых быстрых машин&lt;br /&gt;
&lt;br /&gt;
==Пример==&lt;br /&gt;
[[Файл:qptmncmax.png|400px|thumb|right|Картинка к примеру]]&lt;br /&gt;
&lt;br /&gt;
Пусть у нас есть 5 работ и 4 станка. Покажем работу алгоритма для данного случая.&lt;br /&gt;
&lt;br /&gt;
В начальный момент времени начинаем обрабатывать работы с наибольшим временем выполнения &amp;lt;tex&amp;gt;J_1-J_4&amp;lt;/tex&amp;gt; на станках &amp;lt;tex&amp;gt;M_1-M_4&amp;lt;/tex&amp;gt; соответственно. В момент времени &amp;lt;tex&amp;gt;t_1&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;lvl&amp;lt;/tex&amp;gt; 4-ой работы опускается до времени выполнения 5-ой работы. С этого момента начинаем обрабатывать работы &amp;lt;tex&amp;gt; J_4,J_5&amp;lt;/tex&amp;gt; на одном станке: &amp;lt;tex&amp;gt;M_4&amp;lt;/tex&amp;gt;. В момент времени &amp;lt;tex&amp;gt;t_2&amp;lt;/tex&amp;gt; происходит похожая ситуация. С этого момента времени работы &amp;lt;tex&amp;gt; J_1,J_2&amp;lt;/tex&amp;gt; выполняются синхронно на двух станках &amp;lt;tex&amp;gt; M_1,M_2&amp;lt;/tex&amp;gt;. Далее работы не пересекаются друг с другом и каждая заканчивается на ранее выделенных им станках.&lt;br /&gt;
&lt;br /&gt;
==Время работы==&lt;br /&gt;
Level-алгоритм вызывает функцию Assign(t) в самом худшем случае &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; раз. Функция Assign(t) выполняется за &amp;lt;tex&amp;gt;O(nm)&amp;lt;/tex&amp;gt;. Итоговое время работы &amp;lt;tex&amp;gt;O(n^2m)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Литература==&lt;br /&gt;
* Peter Brucker. «Scheduling Algorithms» {{---}} «Springer», 2006 г. {{---}} 379 стр. {{---}} ISBN 978-3-540-69515-8&lt;/div&gt;</summary>
		<author><name>217.118.78.115</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=QpmtnCmax&amp;diff=24516</id>
		<title>QpmtnCmax</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=QpmtnCmax&amp;diff=24516"/>
				<updated>2012-06-09T08:42:01Z</updated>
		
		<summary type="html">&lt;p&gt;217.118.78.115: /* Алгоритм построения расписания */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;background-color: #ABCDEF; font-size: 16px; font-weight: bold; color: #000000; text-align: center; padding: 4px; border-style: solid; border-width: 1px;&amp;quot;&amp;gt;Эта статья находится в разработке!&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;includeonly&amp;gt;[[Категория: В разработке]]&amp;lt;/includeonly&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Постановка задачи==&lt;br /&gt;
Есть несколько станков с разной скоростью выполнения работ. Работу на каждом из станков можно прервать и продолжить позже. &lt;br /&gt;
&lt;br /&gt;
Цель - выполнить все как можно быстрее.&lt;br /&gt;
&lt;br /&gt;
1. Найдем нижнюю границу времени выполнения.&lt;br /&gt;
&lt;br /&gt;
2. Составим оптимальное расписание.&lt;br /&gt;
&lt;br /&gt;
==Алгоритм построения расписания==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; P_i = p_1 + ... + p_i&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; S_j = p_1 + ... + p_j&amp;lt;/tex&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;j = 1 ... m&amp;lt;/tex&amp;gt;; &amp;lt;tex&amp;gt; n \ge m&amp;lt;/tex&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
Необходимое условие для выполнения всех работ в интервале &amp;lt;tex&amp;gt;[0;T]&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; P_n = p_1 + ... + p_n \le s_1T + ... + s_mT = S_mT&amp;lt;/tex&amp;gt; или  &amp;lt;tex&amp;gt;P_n/S_m \le T&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;
&amp;lt;tex&amp;gt;w = \max&amp;lt;/tex&amp;gt;{&amp;lt;tex&amp;gt;\max\limits_{j=1}^{m-1} P_i/S_j, P_n/S_m&amp;lt;/tex&amp;gt;}&lt;br /&gt;
&lt;br /&gt;
Далее построим расписание, которое достигает нашей оценки &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;, с помощью Level-алгоритма.&lt;br /&gt;
&lt;br /&gt;
Level - алгоритм:&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;tex&amp;gt;t \leftarrow 0 &amp;lt;/tex&amp;gt;&lt;br /&gt;
   '''WHILE''' существуют работы с положительным lvl&lt;br /&gt;
       Assign(t)&lt;br /&gt;
       &amp;lt;tex&amp;gt;t1 \leftarrow min(s&amp;gt;t |&amp;lt;/tex&amp;gt;работа выполненная в момент времени &amp;lt;tex&amp;gt; s)&amp;lt;/tex&amp;gt;&lt;br /&gt;
       &amp;lt;tex&amp;gt;t2 \leftarrow min(s&amp;gt;t | p_i(t)&amp;gt;p_j(t)&amp;lt;/tex&amp;gt; &amp;amp;&amp;amp; &amp;lt;tex&amp;gt;  p_i(s) == p_j(s))&amp;lt;/tex&amp;gt;&lt;br /&gt;
       &amp;lt;tex&amp;gt; t \leftarrow min(t1,t2) &amp;lt;/tex&amp;gt;&lt;br /&gt;
   Построение расписания&lt;br /&gt;
&lt;br /&gt;
Функция &amp;lt;tex&amp;gt;Assign(t)&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;tex&amp;gt;J = &amp;lt;/tex&amp;gt;{&amp;lt;tex&amp;gt;i|p_i(t)&amp;gt;0&amp;lt;/tex&amp;gt;}&lt;br /&gt;
   &amp;lt;tex&amp;gt;M = &amp;lt;/tex&amp;gt;{&amp;lt;tex&amp;gt;M_1,...,M_m&amp;lt;/tex&amp;gt;}&lt;br /&gt;
   '''WHILE''' (&amp;lt;tex&amp;gt;J&amp;lt;/tex&amp;gt; != 0 &amp;amp;&amp;amp; &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; != 0)&lt;br /&gt;
      Найти множество работ &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt; подмножество &amp;lt;tex&amp;gt;J&amp;lt;/tex&amp;gt; ,lvl которых максимальный&lt;br /&gt;
      &amp;lt;tex&amp;gt;r \leftarrow min&amp;lt;/tex&amp;gt;(|&amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;|,|&amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;|)&lt;br /&gt;
      Назначаем работы из мн-ва &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt; самых быстрых машин из мн-ва &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;&lt;br /&gt;
      &amp;lt;tex&amp;gt;J \leftarrow J&amp;lt;/tex&amp;gt;\&amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;&lt;br /&gt;
      удаляем из мн-ва &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt; самых быстрых машин&lt;br /&gt;
&lt;br /&gt;
==Пример==&lt;br /&gt;
[[Файл:qptmncmax.png|400px|thumb|right|Картинка к примеру]]&lt;br /&gt;
&lt;br /&gt;
Пусть у нас есть 5 работ и 4 станка. Покажем работу алгоритма для данного случая.&lt;br /&gt;
&lt;br /&gt;
В начальный момент времени начинаем обрабатывать работы с наибольшим временем выполнения &amp;lt;tex&amp;gt;J_1-J_4&amp;lt;/tex&amp;gt; на станках &amp;lt;tex&amp;gt;M_1-M_4&amp;lt;/tex&amp;gt; соответственно. В момент времени &amp;lt;tex&amp;gt;t_1&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;lvl&amp;lt;/tex&amp;gt; 4-ой работы опускается до времени выполнения 5-ой работы. С этого момента начинаем обрабатывать работы &amp;lt;tex&amp;gt; J_4,J_5&amp;lt;/tex&amp;gt; на одном станке: &amp;lt;tex&amp;gt;M_4&amp;lt;/tex&amp;gt;. В момент времени &amp;lt;tex&amp;gt;t_2&amp;lt;/tex&amp;gt; происходит похожая ситуация. С этого момента времени работы &amp;lt;tex&amp;gt; J_1,J_2&amp;lt;/tex&amp;gt; выполняются синхронно на двух станках &amp;lt;tex&amp;gt; M_1,M_2&amp;lt;/tex&amp;gt;. Далее работы не пересекаются друг с другом и каждая заканчивается на ранее выделенных им станках.&lt;br /&gt;
&lt;br /&gt;
==Время работы==&lt;br /&gt;
Level-алгоритм вызывает функцию Assign(t) в самом худшем случае &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; раз. Функция Assign(t) выполняется за &amp;lt;tex&amp;gt;O(nm)&amp;lt;/tex&amp;gt;. Итоговое время работы &amp;lt;tex&amp;gt;O(n^2m)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Литература==&lt;br /&gt;
* Peter Brucker. «Scheduling Algorithms» {{---}} «Springer», 2006 г. {{---}} 379 стр. {{---}} ISBN 978-3-540-69515-8&lt;/div&gt;</summary>
		<author><name>217.118.78.115</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%91%D0%B5%D0%B9%D0%BA%D0%B5%D1%80%D0%B0_%E2%80%94_%D0%93%D0%B8%D0%BB%D0%BB%D0%B0_%E2%80%94_%D0%A1%D0%BE%D0%BB%D0%BE%D0%B2%D1%8D%D1%8F&amp;diff=23745</id>
		<title>Теорема Бейкера — Гилла — Соловэя</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%91%D0%B5%D0%B9%D0%BA%D0%B5%D1%80%D0%B0_%E2%80%94_%D0%93%D0%B8%D0%BB%D0%BB%D0%B0_%E2%80%94_%D0%A1%D0%BE%D0%BB%D0%BE%D0%B2%D1%8D%D1%8F&amp;diff=23745"/>
				<updated>2012-06-04T13:49:35Z</updated>
		
		<summary type="html">&lt;p&gt;217.118.78.115: /* Следствия */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
==Теорема==&lt;br /&gt;
{{ Теорема&lt;br /&gt;
| statement = Существуют такие оракулы &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;\mathrm{P^A} = \mathrm{NP^A} &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\mathrm{P^B} \ne \mathrm{NP^B} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
| proof = &lt;br /&gt;
'''Существование оракула &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
Рассмотрим [[PS-полнота языка верных булевых формул с кванторами (TQBF) | PS-полный язык &amp;lt;tex&amp;gt;\mathrm{TQBF}&amp;lt;/tex&amp;gt;]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\mathrm{P^{TQBF}}   \overset{(1)}{\subseteq}&lt;br /&gt;
\mathrm{NP^{TQBF}}  \overset{(2)}{\subseteq}&lt;br /&gt;
\mathrm{NPS^{TQBF}} \overset{(3)}{=}&lt;br /&gt;
\mathrm{PS^{TQBF}}  \overset{(4)}{=}&lt;br /&gt;
\mathrm{PS}         \overset{(5)}{\subseteq}&lt;br /&gt;
\mathrm{P^{TQBF}}&lt;br /&gt;
\Rightarrow&lt;br /&gt;
&amp;lt;/tex&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;\Rightarrow \mathrm{P^{TQBF}} = \mathrm{NP^{TQBF}}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;tex&amp;gt; \mathrm{P} \subseteq \mathrm{NP} \Rightarrow \mathrm{P^{TQBF}} \subseteq \mathrm{NP^{TQBF}} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Так как &amp;lt;tex&amp;gt;S(p,x) \le T(p, x)&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt; \mathrm{NP} \subseteq \mathrm{NPS} \Rightarrow \mathrm{NP^{TQBF}} \subseteq \mathrm{NPS^{TQBF}} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
# По [[ Класс PS. Теорема Сэвича. Совпадение классов NPS и PS | теореме Сэвича]] &amp;lt;tex&amp;gt; \mathrm{NPS^{TQBF}} = \mathrm{PS^{TQBF}} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
# &amp;lt;tex&amp;gt; \mathrm{TQBF} \in \mathrm{PS} \Rightarrow \mathrm{PS^{TQBF}} = \mathrm{PS} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
# &amp;lt;tex&amp;gt; \mathrm{TQBF} \in \mathrm{PSC} \Rightarrow \mathrm{PS} \subseteq \mathrm{P^{TQBF}} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Следовательно, &amp;lt;tex&amp;gt;\mathrm{P^{TQBF}} = \mathrm{NP^{TQBF}}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''Существование оракула &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; — произвольное множество, а &amp;lt;tex&amp;gt;U_B = \{1^n \bigm| \exists x \in B : |x| = n\}&amp;lt;/tex&amp;gt;. Ясно, что &amp;lt;tex&amp;gt;\forall B&amp;lt;/tex&amp;gt; выполнено &amp;lt;tex&amp;gt;U_B \in \mathrm{NP}^B&amp;lt;/tex&amp;gt; (сертификатом будет слово нужной длины из &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;). Построим такое множество &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;U_B \not\in \mathrm{P}^B&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Пронумеруем некоторым образом все машины Тьюринга, работающие за полиномиальное время и имеющие доступ к оракулу языка &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;, и рассмотрим последовательность &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt;, в которой каждая машина Тьюринга встречается бесконечное число раз. Очевидно, это можно сделать в силу счетности множества машин Тьюринга. Построение множества &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; разделим на счетное число стадий. Будем строить &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; так, чтобы на &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;-й стадии было выполнено: существует слово &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;T(M_i, x) \ge 2^{n-1}&amp;lt;/tex&amp;gt;.  Это утверждение сильнее, чем &amp;lt;tex&amp;gt;U_B \not\in \mathrm{P}^B&amp;lt;/tex&amp;gt;, так как &amp;lt;tex&amp;gt;2^n&amp;lt;/tex&amp;gt; растет быстрее любого полинома.&lt;br /&gt;
* 0-я стадия: &amp;lt;tex&amp;gt;B \leftarrow \emptyset &amp;lt;/tex&amp;gt;.&lt;br /&gt;
* &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;-я стадия. Стадии с 0-й по &amp;lt;tex&amp;gt;(i-1)&amp;lt;/tex&amp;gt;-ю пройдены, &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; — конечное множество слов. Пусть самое длинное из них состоит из &amp;lt;tex&amp;gt;(n-1)&amp;lt;/tex&amp;gt;-го символа. Запустим машину &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt; на входе &amp;lt;tex&amp;gt;1^n&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;2^{n-1}&amp;lt;/tex&amp;gt; шагов. Когда &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt; требуется ответ оракула языка &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; о слове &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt;, будем определять принадлежность этого слова к &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; следующим образом:&lt;br /&gt;
** если принадлежность &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; множеству &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; была определена на одной из предыдущих стадий, то она сохраняется;&lt;br /&gt;
** если принадлежность &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; множеству &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; не установлена ранее, то далее считаем, что &amp;lt;tex&amp;gt;x \not\in B&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Но &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt; могла остановится раньше, чем за &amp;lt;tex&amp;gt;2^{n-1}&amp;lt;/tex&amp;gt; шагов и вернуть какое-либо значение. Так как &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; строится с условием, что для выбранного &amp;lt;tex&amp;gt;x = 1^n&amp;lt;/tex&amp;gt; выполнено: &amp;lt;tex&amp;gt;T(M_i,x) \ge 2^{n-1}&amp;lt;/tex&amp;gt;, то решение машины о принадлежности слова должно быть неверным:&lt;br /&gt;
* если &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt; приняла слово, то исключим из &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; все слова вида &amp;lt;tex&amp;gt;\{0,1\}^n&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* Если &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt; отклонила слово, то выберем слово &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; длины &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;, принадлежность которого &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; еще не определено. Добавим &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;. Такое слово всегда найдется, так как на предыдущий шагах мы могли сделать не более, чем &amp;lt;tex&amp;gt;2^n-1&amp;lt;/tex&amp;gt; запросов к оракулу (то есть определить принадлежность &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; не более &amp;lt;tex&amp;gt;2^n-1&amp;lt;/tex&amp;gt; слов длины &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;), а всего слов длины n &amp;lt;tex&amp;gt;2^n&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Во множестве &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; на каждой стадии содержится конечное число элементов, так как на каждой стадии в &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; может быть добавлено не более чем &amp;lt;tex&amp;gt;2^{n-1}+1&amp;lt;/tex&amp;gt; слов. &lt;br /&gt;
&lt;br /&gt;
Из построения получаем, что для любой машины Тьюринга &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; существует бесконечно много слов из &amp;lt;tex&amp;gt;U_B&amp;lt;/tex&amp;gt;, для которых &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; не может принять верное решение о принадлежности слова &amp;lt;tex&amp;gt;U_B&amp;lt;/tex&amp;gt; за время, меньшее &amp;lt;tex&amp;gt;2^{n-1}&amp;lt;/tex&amp;gt;. Следовательно, &amp;lt;tex&amp;gt;U_B \not\in \mathrm{P}^B&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;
| statement = Если существует решение вопроса равенства &amp;lt;tex&amp;gt;\mathrm{P}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; \mathrm{NP}&amp;lt;/tex&amp;gt;, то оно не должно &amp;quot;релятивизоваться&amp;quot;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Для доказательства строгого включения классов часто используется метод диагонализации. Однако утверждения полученные при помощи данной техники могут быть &amp;quot;релятивизованы&amp;quot;. То есть при &amp;quot;разрешении&amp;quot; машине Тьюринга доступа к оракулу некоторого языка доказанное соотношение классов сохраняется. Однако соотношение &amp;lt;tex&amp;gt;\mathrm{P}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\mathrm{NP}&amp;lt;/tex&amp;gt; не должно &amp;quot;релятивизоваться&amp;quot; по теореме Бейкера-Гилла-Соловэя, следовательно, метод диагонализации не применим для решения этого вопроса.&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория сложности]]&lt;/div&gt;</summary>
		<author><name>217.118.78.115</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%91%D0%B5%D0%B9%D0%BA%D0%B5%D1%80%D0%B0_%E2%80%94_%D0%93%D0%B8%D0%BB%D0%BB%D0%B0_%E2%80%94_%D0%A1%D0%BE%D0%BB%D0%BE%D0%B2%D1%8D%D1%8F&amp;diff=20719</id>
		<title>Теорема Бейкера — Гилла — Соловэя</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%91%D0%B5%D0%B9%D0%BA%D0%B5%D1%80%D0%B0_%E2%80%94_%D0%93%D0%B8%D0%BB%D0%BB%D0%B0_%E2%80%94_%D0%A1%D0%BE%D0%BB%D0%BE%D0%B2%D1%8D%D1%8F&amp;diff=20719"/>
				<updated>2012-04-15T09:13:03Z</updated>
		
		<summary type="html">&lt;p&gt;217.118.78.115: Новая страница: «{{ Теорема | statement = Существуют такие оракулы &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;\mathrm{P^A} = \mathrm{NP^A} &amp;lt;/tex&amp;gt; и &amp;lt;t...»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ Теорема&lt;br /&gt;
| statement = Существуют такие оракулы &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;\mathrm{P^A} = \mathrm{NP^A} &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\mathrm{P^B} \ne \mathrm{NP^B} &amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>217.118.78.115</name></author>	</entry>

	</feed>