<?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.35&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.35&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.35"/>
		<updated>2026-05-20T01:54:39Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=QpmtnCmax&amp;diff=22735</id>
		<title>QpmtnCmax</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=QpmtnCmax&amp;diff=22735"/>
				<updated>2012-05-25T12:23:09Z</updated>
		
		<summary type="html">&lt;p&gt;217.118.78.35: /* Алгоритм построения расписания */&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;
Далее построим расписание, которое достигает нашей оценки w, с помощью 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.35</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=QpmtnCmax&amp;diff=22734</id>
		<title>QpmtnCmax</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=QpmtnCmax&amp;diff=22734"/>
				<updated>2012-05-25T12:21:51Z</updated>
		
		<summary type="html">&lt;p&gt;217.118.78.35: /* Алгоритм построения расписания */&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;
Далее построим расписание, которое достигает нашей оценки w, с помощью 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.35</name></author>	</entry>

	</feed>