<?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.66.152.15&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.66.152.15&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.66.152.15"/>
		<updated>2026-05-11T14:25:22Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=1ripi1sumwc&amp;diff=26506</id>
		<title>1ripi1sumwc</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=1ripi1sumwc&amp;diff=26506"/>
				<updated>2012-06-22T21:00:33Z</updated>
		
		<summary type="html">&lt;p&gt;217.66.152.15: /* Доказательство корректности алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Постановка задачи==&lt;br /&gt;
Рассмотрим задачу:&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Дано &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; работ и один станок.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Для каждой работы известно её время появления &amp;lt;tex&amp;gt;r_{i}&amp;lt;/tex&amp;gt; и вес &amp;lt;tex&amp;gt;w_{i}&amp;lt;/tex&amp;gt;. Время выполнения всех работ &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; равно &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
Требуется выполнить все работы, чтобы значение &amp;lt;tex&amp;gt;\sum w_{i} c_{i}&amp;lt;/tex&amp;gt; было минимальным.&lt;br /&gt;
&lt;br /&gt;
==Описание алгоритма==&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;time&amp;lt;/tex&amp;gt; {{---}} текущий момент времени.&amp;lt;br/&amp;gt;&lt;br /&gt;
Для каждого очередного значения &amp;lt;tex&amp;gt;time&amp;lt;/tex&amp;gt;, которое изменяется от &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt; до времени окончания последней работы, будем:&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Выбирать работу &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt; из множества невыполненных работ, у которой &amp;lt;tex&amp;gt;r_{i} \le time&amp;lt;/tex&amp;gt;, а значение &amp;lt;tex&amp;gt;w_{i}&amp;lt;/tex&amp;gt; максимально.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Если мы смогли найти работу &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt;, то выполняем её в момент времени &amp;lt;tex&amp;gt;time&amp;lt;/tex&amp;gt; и удаляем из множества невыполненных работ.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Увеличиваем &amp;lt;tex&amp;gt;time&amp;lt;/tex&amp;gt; на один.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Доказательство корректности алгоритма==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Расписание, построенное данным алгоритмом, является корректным и оптимальным.&lt;br /&gt;
|proof=&lt;br /&gt;
Доказательство будем вести от противного.&amp;lt;br/&amp;gt;&lt;br /&gt;
Рассмотрим расписание &amp;lt;tex&amp;gt;S_{1}&amp;lt;/tex&amp;gt;, полученное после выполнения нашего алгоритма, и оптимальное расписание &amp;lt;tex&amp;gt;S_{2}&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Возьмём первый момент времени &amp;lt;tex&amp;gt;t_{1}&amp;lt;/tex&amp;gt;, когда расписания  различаются. Пусть в этот момент времени  в &amp;lt;tex&amp;gt;S_{1}&amp;lt;/tex&amp;gt;, будет выполняться работа с весом &amp;lt;tex&amp;gt;w_{1}&amp;lt;/tex&amp;gt;, а в &amp;lt;tex&amp;gt;S_{2}&amp;lt;/tex&amp;gt; {{---}} работа с весом &amp;lt;tex&amp;gt;w_{2}&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Это первый момент, в котором расписания отличаются, значит в &amp;lt;tex&amp;gt;S_{2}&amp;lt;/tex&amp;gt; работа с весом &amp;lt;tex&amp;gt;w_{1}&amp;lt;/tex&amp;gt; выполнится в момент времени &amp;lt;tex&amp;gt;t_{2} &amp;gt; t_{1}&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Поменяем местами работы с весами &amp;lt;tex&amp;gt;w_{1}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;w_{2}&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;S_{2}&amp;lt;/tex&amp;gt; и полуим расписание &amp;lt;tex&amp;gt;S_{3}&amp;lt;/tex&amp;gt;. Это возможно, потому что время появления этих работ не меньше &amp;lt;tex&amp;gt;t_{1}&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
При такой перестановке ответы на задачу для &amp;lt;tex&amp;gt;S_{2}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;S_{3}&amp;lt;/tex&amp;gt; будут отличаться на &lt;br /&gt;
&amp;lt;ul&amp;gt;&amp;lt;tex&amp;gt;t_{1}w_{2} + t_{2}w_{1} - t_{1}w_{1} + t_{2}w_{2} = t_{1}(w_{2} - w_{1}) + t_{2}(w_{1} - w_{2}) = (t_{1} - t_{2})(w_{2} - w_{1})&amp;lt;/tex&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
Первая скобка отрицательная: &amp;lt;tex&amp;gt;t_{1} &amp;lt; t_{2}&amp;lt;/tex&amp;gt;. Вторая скобка тоже отрицательная из того, что в &amp;lt;tex&amp;gt;S_{1}&amp;lt;/tex&amp;gt; работа с весом &amp;lt;tex&amp;gt;w_1&amp;lt;/tex&amp;gt; выполняется раньше, значит её вес должен быть больше &amp;lt;tex&amp;gt;w_2&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Итого имеем, что ответ для &amp;lt;tex&amp;gt;S_{2}&amp;lt;/tex&amp;gt; больше, чем ответ для &amp;lt;tex&amp;gt;S_{3}&amp;lt;/tex&amp;gt;. Следовательно расписание &amp;lt;tex&amp;gt;S_2&amp;lt;/tex&amp;gt; неоптимальное. Получили противоречие. Значит не существует такого момента времени, когда расписание &amp;lt;tex&amp;gt;S_{1}&amp;lt;/tex&amp;gt; отличается от оптимального. Следовательно мы доказали, что оно оптимальное.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Псевдокод==&lt;br /&gt;
   &amp;lt;tex&amp;gt; S \leftarrow \{1 \dots n\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
   &amp;lt;tex&amp;gt; time \leftarrow 0&amp;lt;/tex&amp;gt;&lt;br /&gt;
   &amp;lt;tex&amp;gt; answer \leftarrow 0&amp;lt;/tex&amp;gt;&lt;br /&gt;
   while &amp;lt;tex&amp;gt; S \neq \varnothing &amp;lt;/tex&amp;gt;&lt;br /&gt;
      &amp;lt;tex&amp;gt; j \leftarrow i : (\max \limits_{i \in S, r_{i} \leq time} w_{i})&amp;lt;/tex&amp;gt;&lt;br /&gt;
      if &amp;lt;tex&amp;gt;j \neq null &amp;lt;/tex&amp;gt;&lt;br /&gt;
         &amp;lt;tex&amp;gt; S \leftarrow S \setminus j&amp;lt;/tex&amp;gt;&lt;br /&gt;
         &amp;lt;tex&amp;gt; Answer \leftarrow Answer + time \cdot w_{j}&amp;lt;/tex&amp;gt;&lt;br /&gt;
      &amp;lt;tex&amp;gt; time++&amp;lt;/tex&amp;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;n + \max r_{i}&amp;lt;/tex&amp;gt; шагов цикла. Определить максимум в множестве можно за время &amp;lt;tex&amp;gt;O(\log n)&amp;lt;/tex&amp;gt;, используя , например, очередь с приоритетами. Значит общее время работы алгоритма &amp;lt;tex&amp;gt;O((n + \max r_{i})\log n)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;br /&gt;
[[Категория: Теория расписаний]]&lt;/div&gt;</summary>
		<author><name>217.66.152.15</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=1ripi1sumwc&amp;diff=26504</id>
		<title>1ripi1sumwc</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=1ripi1sumwc&amp;diff=26504"/>
				<updated>2012-06-22T20:53:37Z</updated>
		
		<summary type="html">&lt;p&gt;217.66.152.15: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Постановка задачи==&lt;br /&gt;
Рассмотрим задачу:&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Дано &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; работ и один станок.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Для каждой работы известно её время появления &amp;lt;tex&amp;gt;r_{i}&amp;lt;/tex&amp;gt; и вес &amp;lt;tex&amp;gt;w_{i}&amp;lt;/tex&amp;gt;. Время выполнения всех работ &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; равно &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
Требуется выполнить все работы, чтобы значение &amp;lt;tex&amp;gt;\sum w_{i} c_{i}&amp;lt;/tex&amp;gt; было минимальным.&lt;br /&gt;
&lt;br /&gt;
==Описание алгоритма==&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;time&amp;lt;/tex&amp;gt; {{---}} текущий момент времени.&amp;lt;br/&amp;gt;&lt;br /&gt;
Для каждого очередного значения &amp;lt;tex&amp;gt;time&amp;lt;/tex&amp;gt;, которое изменяется от &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt; до времени окончания последней работы, будем:&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Выбирать работу &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt; из множества невыполненных работ, у которой &amp;lt;tex&amp;gt;r_{i} \le time&amp;lt;/tex&amp;gt;, а значение &amp;lt;tex&amp;gt;w_{i}&amp;lt;/tex&amp;gt; максимально.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Если мы смогли найти работу &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt;, то выполняем её в момент времени &amp;lt;tex&amp;gt;time&amp;lt;/tex&amp;gt; и удаляем из множества невыполненных работ.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Увеличиваем &amp;lt;tex&amp;gt;time&amp;lt;/tex&amp;gt; на один.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Доказательство корректности алгоритма==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Расписание, построенное данным алгоритмом, является корректным и оптимальным.&lt;br /&gt;
|proof=&lt;br /&gt;
Доказательство будем вести от противного.&amp;lt;br/&amp;gt;&lt;br /&gt;
Рассмотрим расписание &amp;lt;tex&amp;gt;S_{1}&amp;lt;/tex&amp;gt;, полученное после выполнения нашего алгоритма, и оптимальное расписание &amp;lt;tex&amp;gt;S_{2}&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Возьмём первый момент времени &amp;lt;tex&amp;gt;t_{1}&amp;lt;/tex&amp;gt;, когда расписания  различаются. Пусть в этот момент времени  в &amp;lt;tex&amp;gt;S_{1}&amp;lt;/tex&amp;gt;, будет выполняться работа с весом &amp;lt;tex&amp;gt;w_{1}&amp;lt;/tex&amp;gt;, а в &amp;lt;tex&amp;gt;S_{2}&amp;lt;/tex&amp;gt; {{---}} работа с весом &amp;lt;tex&amp;gt;w_{2}&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Это первый момент, в котором расписания отличаются, значит в &amp;lt;tex&amp;gt;S_{2}&amp;lt;/tex&amp;gt; работа с весом &amp;lt;tex&amp;gt;w_{1}&amp;lt;/tex&amp;gt; выполнится в момент времени &amp;lt;tex&amp;gt;t_{2} &amp;gt; t_{1}&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Поменяем местами работы с весами &amp;lt;tex&amp;gt;w_{1}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;w_{2}&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;S_{2}&amp;lt;/tex&amp;gt; и полуим расписание &amp;lt;tex&amp;gt;S_{3}&amp;lt;/tex&amp;gt;. Это возможно, потому что время появления этих работ не меньше &amp;lt;tex&amp;gt;t_{1}&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
При такой перестановке ответы на задачу для &amp;lt;tex&amp;gt;S_{2}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;S_{3}&amp;lt;/tex&amp;gt; будут отличаться на &lt;br /&gt;
&amp;lt;ul&amp;gt;&amp;lt;tex&amp;gt;(t_{1} - r_{2})w_{2} + (t_{2} - r_{1})w_{1} - ((t_{1} - r_{1})w_{1} + (t_{2} - r_{2})w_{2}) = t_{1}(w_{2} - w_{1}) + t_{2}(w_{1} - w_{2}) = (t_{1} - t_{2})(w_{2} - w_{1})&amp;lt;/tex&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
Первая скобка отрицательная: &amp;lt;tex&amp;gt;t_{1} &amp;lt; t_{2}&amp;lt;/tex&amp;gt;. Вторая скобка тоже отрицательная из того, что в &amp;lt;tex&amp;gt;S_{1}&amp;lt;/tex&amp;gt; работа с весом &amp;lt;tex&amp;gt;w_1&amp;lt;/tex&amp;gt; выполняется раньше, значит её вес должен быть больше &amp;lt;tex&amp;gt;w_2&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Итого имеем, что ответ для &amp;lt;tex&amp;gt;S_{2}&amp;lt;/tex&amp;gt; больше, чем ответ для &amp;lt;tex&amp;gt;S_{3}&amp;lt;/tex&amp;gt;. Следовательно расписание &amp;lt;tex&amp;gt;S_2&amp;lt;/tex&amp;gt; неоптимальное. Получили противоречие. Значит не существует такого момента времени, когда расписание &amp;lt;tex&amp;gt;S_{1}&amp;lt;/tex&amp;gt; отличается от оптимального. Следовательно мы доказали, что оно оптимальное.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Псевдокод==&lt;br /&gt;
   &amp;lt;tex&amp;gt; S \leftarrow \{1 \dots n\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
   &amp;lt;tex&amp;gt; time \leftarrow 0&amp;lt;/tex&amp;gt;&lt;br /&gt;
   &amp;lt;tex&amp;gt; answer \leftarrow 0&amp;lt;/tex&amp;gt;&lt;br /&gt;
   while &amp;lt;tex&amp;gt; S \neq \varnothing &amp;lt;/tex&amp;gt;&lt;br /&gt;
      &amp;lt;tex&amp;gt; j \leftarrow i : (\max \limits_{i \in S, r_{i} \leq time} w_{i})&amp;lt;/tex&amp;gt;&lt;br /&gt;
      if &amp;lt;tex&amp;gt;j \neq null &amp;lt;/tex&amp;gt;&lt;br /&gt;
         &amp;lt;tex&amp;gt; S \leftarrow S \setminus j&amp;lt;/tex&amp;gt;&lt;br /&gt;
         &amp;lt;tex&amp;gt; Answer \leftarrow Answer + time \cdot w_{j}&amp;lt;/tex&amp;gt;&lt;br /&gt;
      &amp;lt;tex&amp;gt; time++&amp;lt;/tex&amp;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;n + \max r_{i}&amp;lt;/tex&amp;gt; шагов цикла. Определить максимум в множестве можно за время &amp;lt;tex&amp;gt;O(\log n)&amp;lt;/tex&amp;gt;, используя , например, очередь с приоритетами. Значит общее время работы алгоритма &amp;lt;tex&amp;gt;O((n + \max r_{i})\log n)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;br /&gt;
[[Категория: Теория расписаний]]&lt;/div&gt;</summary>
		<author><name>217.66.152.15</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=1ripi1sumwc&amp;diff=26502</id>
		<title>1ripi1sumwc</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=1ripi1sumwc&amp;diff=26502"/>
				<updated>2012-06-22T20:51:26Z</updated>
		
		<summary type="html">&lt;p&gt;217.66.152.15: /* Постановка задачи */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Постановка задачи==&lt;br /&gt;
Рассмотрим задачу:&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Дано &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; работ и один станок.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Для каждой работы известно её время появления &amp;lt;tex&amp;gt;r_{i}&amp;lt;/tex&amp;gt; и вес &amp;lt;tex&amp;gt;w_{i}&amp;lt;/tex&amp;gt;. Время выполнения всех работ &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; равно &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
Требуется выполнить все работы, чтобы значение &amp;lt;tex&amp;gt;\sum w_{i} c_{i}&amp;lt;/tex&amp;gt; было минимальным.&lt;br /&gt;
&lt;br /&gt;
==Описание алгоритма==&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;time&amp;lt;/tex&amp;gt; {{---}} текущий момент времени.&amp;lt;br/&amp;gt;&lt;br /&gt;
Для каждого очередного значения &amp;lt;tex&amp;gt;time&amp;lt;/tex&amp;gt;, которое изменяется от &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt; до времени окончания последней работы, будем:&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Выбирать работу &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt; из множества невыполненных работ, у которой &amp;lt;tex&amp;gt;r_{i} \le time&amp;lt;/tex&amp;gt;, а значение &amp;lt;tex&amp;gt;w_{i}&amp;lt;/tex&amp;gt; максимально.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Если мы смогли найти работу &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt;, то выполняем её в момент времени &amp;lt;tex&amp;gt;time&amp;lt;/tex&amp;gt; и удаляем из множества невыполненных работ.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Увеличиваем &amp;lt;tex&amp;gt;time&amp;lt;/tex&amp;gt; на один.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Доказательство корректности алгоритма==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Расписание, построенное данным алгоритмом, является корректным и оптимальным.&lt;br /&gt;
|proof=&lt;br /&gt;
Доказательство будем вести от противного.&amp;lt;br/&amp;gt;&lt;br /&gt;
Рассмотрим расписание &amp;lt;tex&amp;gt;S_{1}&amp;lt;/tex&amp;gt;, полученное после выполнения нашего алгоритма, и оптимальное расписание &amp;lt;tex&amp;gt;S_{2}&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Возьмём первый момент времени &amp;lt;tex&amp;gt;t_{1}&amp;lt;/tex&amp;gt;, когда расписания  различаются. Пусть в этот момент времени  в &amp;lt;tex&amp;gt;S_{1}&amp;lt;/tex&amp;gt;, будет выполняться работа с весом &amp;lt;tex&amp;gt;w_{1}&amp;lt;/tex&amp;gt;, а в &amp;lt;tex&amp;gt;S_{2}&amp;lt;/tex&amp;gt; {{---}} работа с весом &amp;lt;tex&amp;gt;w_{2}&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Это первый момент, в котором расписания отличаются, значит в &amp;lt;tex&amp;gt;S_{2}&amp;lt;/tex&amp;gt; работа с весом &amp;lt;tex&amp;gt;w_{1}&amp;lt;/tex&amp;gt; выполнится в момент времени &amp;lt;tex&amp;gt;t_{2} &amp;gt; t_{1}&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Поменяем местами работы с весами &amp;lt;tex&amp;gt;w_{1}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;w_{2}&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;S_{2}&amp;lt;/tex&amp;gt; и полуим расписание &amp;lt;tex&amp;gt;S_{3}&amp;lt;/tex&amp;gt;. Это возможно, потому что время появления этих работ не меньше &amp;lt;tex&amp;gt;t_{1}&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
При такой перестановке ответы на задачу для &amp;lt;tex&amp;gt;S_{2}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;S_{3}&amp;lt;/tex&amp;gt; будут отличаться на &lt;br /&gt;
&amp;lt;ul&amp;gt;&amp;lt;tex&amp;gt;(t_{1} - r_{2})w_{2} + (t_{2} - r_{1})w_{1} - ((t_{1} - r_{1})w_{1} + (t_{2} - r_{2})w_{2}) = t_{1}(w_{2} - w_{1}) + t_{2}(w_{1} - w_{2}) = (t_{1} - t_{2})(w_{2} - w_{1})&amp;lt;/tex&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
Первая скобка отрицательная: &amp;lt;tex&amp;gt;t_{1} &amp;lt; t_{2}&amp;lt;/tex&amp;gt;. Вторая скобка тоже отрицательная из того, что в &amp;lt;tex&amp;gt;S_{1}&amp;lt;/tex&amp;gt; работа с весом &amp;lt;tex&amp;gt;w_1&amp;lt;/tex&amp;gt; выполняется раньше, значит её вес должен быть больше &amp;lt;tex&amp;gt;w_2&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Итого имеем, что ответ для &amp;lt;tex&amp;gt;S_{2}&amp;lt;/tex&amp;gt; больше, чем ответ для &amp;lt;tex&amp;gt;S_{3}&amp;lt;/tex&amp;gt;. Следовательно расписание &amp;lt;tex&amp;gt;S_2&amp;lt;/tex&amp;gt; неоптимальное. Получили противоречие. Значит не существует такого момента времени, когда расписание &amp;lt;tex&amp;gt;S_{1}&amp;lt;/tex&amp;gt; отличается от оптимального. Следовательно мы доказали, что оно оптимальное.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Псевдокод==&lt;br /&gt;
   &amp;lt;tex&amp;gt; S \leftarrow \{1 \dots n\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
   &amp;lt;tex&amp;gt; time \leftarrow 0&amp;lt;/tex&amp;gt;&lt;br /&gt;
   &amp;lt;tex&amp;gt; answer \leftarrow 0&amp;lt;/tex&amp;gt;&lt;br /&gt;
   while &amp;lt;tex&amp;gt; S \neq \varnothing &amp;lt;/tex&amp;gt;&lt;br /&gt;
      &amp;lt;tex&amp;gt; j \leftarrow i : (\max \limits_{i \in S, r_{i} \leq time} w_{i})&amp;lt;/tex&amp;gt;&lt;br /&gt;
      if &amp;lt;tex&amp;gt;j \neq null &amp;lt;/tex&amp;gt;&lt;br /&gt;
         &amp;lt;tex&amp;gt; S \leftarrow S \setminus j&amp;lt;/tex&amp;gt;&lt;br /&gt;
         &amp;lt;tex&amp;gt; Answer \leftarrow Answer + r_{j}w_{j}&amp;lt;/tex&amp;gt;&lt;br /&gt;
      &amp;lt;tex&amp;gt; time++&amp;lt;/tex&amp;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;n + \max r_{i}&amp;lt;/tex&amp;gt; шагов цикла. Определить максимум в множестве можно за время &amp;lt;tex&amp;gt;O(\log n)&amp;lt;/tex&amp;gt;, используя , например, очередь с приоритетами. Значит общее время работы алгоритма &amp;lt;tex&amp;gt;O((n + \max r_{i})\log n)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;br /&gt;
[[Категория: Теория расписаний]]&lt;/div&gt;</summary>
		<author><name>217.66.152.15</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=1ripi1sumwc&amp;diff=26501</id>
		<title>1ripi1sumwc</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=1ripi1sumwc&amp;diff=26501"/>
				<updated>2012-06-22T20:50:50Z</updated>
		
		<summary type="html">&lt;p&gt;217.66.152.15: /* Псевдокод */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Постановка задачи==&lt;br /&gt;
Рассмотрим задачу:&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Дано &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; работ и один станок.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Для каждой работы известно её время появления &amp;lt;tex&amp;gt;r_{i}&amp;lt;/tex&amp;gt; и вес &amp;lt;tex&amp;gt;w_{i}&amp;lt;/tex&amp;gt;. Время выполнения всех работ &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; равно &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
Требуется выполнить все работы, чтобы значение &amp;lt;tex&amp;gt;\sum w_{i} (c_{i}- r_{i} - 1)&amp;lt;/tex&amp;gt; было минимальным.&lt;br /&gt;
&lt;br /&gt;
==Описание алгоритма==&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;time&amp;lt;/tex&amp;gt; {{---}} текущий момент времени.&amp;lt;br/&amp;gt;&lt;br /&gt;
Для каждого очередного значения &amp;lt;tex&amp;gt;time&amp;lt;/tex&amp;gt;, которое изменяется от &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt; до времени окончания последней работы, будем:&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Выбирать работу &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt; из множества невыполненных работ, у которой &amp;lt;tex&amp;gt;r_{i} \le time&amp;lt;/tex&amp;gt;, а значение &amp;lt;tex&amp;gt;w_{i}&amp;lt;/tex&amp;gt; максимально.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Если мы смогли найти работу &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt;, то выполняем её в момент времени &amp;lt;tex&amp;gt;time&amp;lt;/tex&amp;gt; и удаляем из множества невыполненных работ.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Увеличиваем &amp;lt;tex&amp;gt;time&amp;lt;/tex&amp;gt; на один.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Доказательство корректности алгоритма==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Расписание, построенное данным алгоритмом, является корректным и оптимальным.&lt;br /&gt;
|proof=&lt;br /&gt;
Доказательство будем вести от противного.&amp;lt;br/&amp;gt;&lt;br /&gt;
Рассмотрим расписание &amp;lt;tex&amp;gt;S_{1}&amp;lt;/tex&amp;gt;, полученное после выполнения нашего алгоритма, и оптимальное расписание &amp;lt;tex&amp;gt;S_{2}&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Возьмём первый момент времени &amp;lt;tex&amp;gt;t_{1}&amp;lt;/tex&amp;gt;, когда расписания  различаются. Пусть в этот момент времени  в &amp;lt;tex&amp;gt;S_{1}&amp;lt;/tex&amp;gt;, будет выполняться работа с весом &amp;lt;tex&amp;gt;w_{1}&amp;lt;/tex&amp;gt;, а в &amp;lt;tex&amp;gt;S_{2}&amp;lt;/tex&amp;gt; {{---}} работа с весом &amp;lt;tex&amp;gt;w_{2}&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Это первый момент, в котором расписания отличаются, значит в &amp;lt;tex&amp;gt;S_{2}&amp;lt;/tex&amp;gt; работа с весом &amp;lt;tex&amp;gt;w_{1}&amp;lt;/tex&amp;gt; выполнится в момент времени &amp;lt;tex&amp;gt;t_{2} &amp;gt; t_{1}&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Поменяем местами работы с весами &amp;lt;tex&amp;gt;w_{1}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;w_{2}&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;S_{2}&amp;lt;/tex&amp;gt; и полуим расписание &amp;lt;tex&amp;gt;S_{3}&amp;lt;/tex&amp;gt;. Это возможно, потому что время появления этих работ не меньше &amp;lt;tex&amp;gt;t_{1}&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
При такой перестановке ответы на задачу для &amp;lt;tex&amp;gt;S_{2}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;S_{3}&amp;lt;/tex&amp;gt; будут отличаться на &lt;br /&gt;
&amp;lt;ul&amp;gt;&amp;lt;tex&amp;gt;(t_{1} - r_{2})w_{2} + (t_{2} - r_{1})w_{1} - ((t_{1} - r_{1})w_{1} + (t_{2} - r_{2})w_{2}) = t_{1}(w_{2} - w_{1}) + t_{2}(w_{1} - w_{2}) = (t_{1} - t_{2})(w_{2} - w_{1})&amp;lt;/tex&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
Первая скобка отрицательная: &amp;lt;tex&amp;gt;t_{1} &amp;lt; t_{2}&amp;lt;/tex&amp;gt;. Вторая скобка тоже отрицательная из того, что в &amp;lt;tex&amp;gt;S_{1}&amp;lt;/tex&amp;gt; работа с весом &amp;lt;tex&amp;gt;w_1&amp;lt;/tex&amp;gt; выполняется раньше, значит её вес должен быть больше &amp;lt;tex&amp;gt;w_2&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Итого имеем, что ответ для &amp;lt;tex&amp;gt;S_{2}&amp;lt;/tex&amp;gt; больше, чем ответ для &amp;lt;tex&amp;gt;S_{3}&amp;lt;/tex&amp;gt;. Следовательно расписание &amp;lt;tex&amp;gt;S_2&amp;lt;/tex&amp;gt; неоптимальное. Получили противоречие. Значит не существует такого момента времени, когда расписание &amp;lt;tex&amp;gt;S_{1}&amp;lt;/tex&amp;gt; отличается от оптимального. Следовательно мы доказали, что оно оптимальное.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Псевдокод==&lt;br /&gt;
   &amp;lt;tex&amp;gt; S \leftarrow \{1 \dots n\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
   &amp;lt;tex&amp;gt; time \leftarrow 0&amp;lt;/tex&amp;gt;&lt;br /&gt;
   &amp;lt;tex&amp;gt; answer \leftarrow 0&amp;lt;/tex&amp;gt;&lt;br /&gt;
   while &amp;lt;tex&amp;gt; S \neq \varnothing &amp;lt;/tex&amp;gt;&lt;br /&gt;
      &amp;lt;tex&amp;gt; j \leftarrow i : (\max \limits_{i \in S, r_{i} \leq time} w_{i})&amp;lt;/tex&amp;gt;&lt;br /&gt;
      if &amp;lt;tex&amp;gt;j \neq null &amp;lt;/tex&amp;gt;&lt;br /&gt;
         &amp;lt;tex&amp;gt; S \leftarrow S \setminus j&amp;lt;/tex&amp;gt;&lt;br /&gt;
         &amp;lt;tex&amp;gt; Answer \leftarrow Answer + r_{j}w_{j}&amp;lt;/tex&amp;gt;&lt;br /&gt;
      &amp;lt;tex&amp;gt; time++&amp;lt;/tex&amp;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;n + \max r_{i}&amp;lt;/tex&amp;gt; шагов цикла. Определить максимум в множестве можно за время &amp;lt;tex&amp;gt;O(\log n)&amp;lt;/tex&amp;gt;, используя , например, очередь с приоритетами. Значит общее время работы алгоритма &amp;lt;tex&amp;gt;O((n + \max r_{i})\log n)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;br /&gt;
[[Категория: Теория расписаний]]&lt;/div&gt;</summary>
		<author><name>217.66.152.15</name></author>	</entry>

	</feed>