<?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=92.100.16.200&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=92.100.16.200&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/92.100.16.200"/>
		<updated>2026-04-30T00:34:50Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=1ridipi1&amp;diff=54451</id>
		<title>1ridipi1</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=1ridipi1&amp;diff=54451"/>
				<updated>2016-06-04T17:25:06Z</updated>
		
		<summary type="html">&lt;p&gt;92.100.16.200: /* Литература */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Постановка задачи==&lt;br /&gt;
Дан один станок на котором нужно выполнить &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; работ. Для каждой работы известны моменты времени, когда можно начинать её выполнять — &amp;lt;tex&amp;gt;r_{i}&amp;lt;/tex&amp;gt; и когда необходимо закончить её выполнение — &amp;lt;tex&amp;gt;d_{i}&amp;lt;/tex&amp;gt;. Время выполнения &amp;lt;tex&amp;gt;p_{i}&amp;lt;/tex&amp;gt; у всех работ одинаково и равно 1. Необходимо узнать, можно ли построить расписание, при котором все работы будут выполнены.&lt;br /&gt;
&lt;br /&gt;
==Алгоритм==&lt;br /&gt;
Идея алгоритма в том, чтобы из тех работ, которые уже можно выполнить, ставить в расписание ту, у которой наименьшее &amp;lt;tex&amp;gt;d_{i}&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;S&amp;lt;/tex&amp;gt; пустое.&lt;br /&gt;
Отсортируем работы по порядку их появления.&lt;br /&gt;
&lt;br /&gt;
Алгоритм &amp;lt;tex&amp;gt;1 | r_{i}, d_{i}, p_{i}=1 | -&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;j\leftarrow1;&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;time\leftarrow1;&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;FOR&amp;lt;/tex&amp;gt;  &amp;lt;tex&amp;gt;i := 1&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;TO&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;DO&amp;lt;/tex&amp;gt;&lt;br /&gt;
          &amp;lt;tex&amp;gt;BEGIN&amp;lt;/tex&amp;gt;&lt;br /&gt;
          &amp;lt;tex&amp;gt;IF&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;S=\varnothing&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;THEN&amp;lt;/tex&amp;gt;&lt;br /&gt;
               &amp;lt;tex&amp;gt;BEGIN&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;time:=r_{j}&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;END&amp;lt;/tex&amp;gt;&lt;br /&gt;
          &amp;lt;tex&amp;gt;WHILE&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;time=r_{j}&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;DO&amp;lt;/tex&amp;gt;&lt;br /&gt;
               &amp;lt;tex&amp;gt;BEGIN&amp;lt;/tex&amp;gt;&lt;br /&gt;
               Добавить &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;&lt;br /&gt;
               &amp;lt;tex&amp;gt;j:=j+1;&amp;lt;/tex&amp;gt;&lt;br /&gt;
               &amp;lt;tex&amp;gt;END&amp;lt;/tex&amp;gt;&lt;br /&gt;
          Пусть &amp;lt;tex&amp;gt;k\in S&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;d_{k}&amp;lt;/tex&amp;gt; минимально&lt;br /&gt;
          &amp;lt;tex&amp;gt;IF&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;d_{k}\le time&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;THEN&amp;lt;/tex&amp;gt;&lt;br /&gt;
               Расписание составить невозможно&lt;br /&gt;
          &amp;lt;tex&amp;gt;ELSE&amp;lt;/tex&amp;gt;&lt;br /&gt;
               &amp;lt;tex&amp;gt;BEGIN&amp;lt;/tex&amp;gt;&lt;br /&gt;
               Удалить &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;&lt;br /&gt;
               &amp;lt;tex&amp;gt;time:=time+1;&amp;lt;/tex&amp;gt;&lt;br /&gt;
               &amp;lt;tex&amp;gt;END&amp;lt;/tex&amp;gt;&lt;br /&gt;
          &amp;lt;tex&amp;gt;END&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Сложность алгоритма &amp;lt;tex&amp;gt;O(n\log n)&amp;lt;/tex&amp;gt; если в качестве &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; использовать структуру, которая позволяет поиск элемента с минимальным &amp;lt;tex&amp;gt;d_{i}&amp;lt;/tex&amp;gt; за &amp;lt;tex&amp;gt;O(\log n)&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;k&amp;lt;/tex&amp;gt;. Попробуем вставить эту работу в расписание. До блока её вставить нельзя, так как &amp;lt;tex&amp;gt;r_{i}&amp;lt;/tex&amp;gt; больше или равно времени начала блока. А в блоке нет пропусков, поэтому нужно поменять её с какой-то &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;-ой, которая уже стоит в этом блоке расписания. У всех таких работ &amp;lt;tex&amp;gt;d_{i}&amp;lt;/tex&amp;gt; меньше или равно &amp;lt;tex&amp;gt;d_{k}&amp;lt;/tex&amp;gt;, так как в алгоритме мы каждый раз брали работу с минимальным &amp;lt;tex&amp;gt;d_{i}&amp;lt;/tex&amp;gt;.   Но &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;-ую работу нельзя выполнить после &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-ой. Значит &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-ую работу выполнить нельзя.&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
* P. Brucker. Scheduling Algorithms (2006), 5th edition, стр. 200&lt;/div&gt;</summary>
		<author><name>92.100.16.200</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=1ridipi1&amp;diff=54450</id>
		<title>1ridipi1</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=1ridipi1&amp;diff=54450"/>
				<updated>2016-06-04T17:23:48Z</updated>
		
		<summary type="html">&lt;p&gt;92.100.16.200: /* Постановка задачи */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Постановка задачи==&lt;br /&gt;
Дан один станок на котором нужно выполнить &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; работ. Для каждой работы известны моменты времени, когда можно начинать её выполнять — &amp;lt;tex&amp;gt;r_{i}&amp;lt;/tex&amp;gt; и когда необходимо закончить её выполнение — &amp;lt;tex&amp;gt;d_{i}&amp;lt;/tex&amp;gt;. Время выполнения &amp;lt;tex&amp;gt;p_{i}&amp;lt;/tex&amp;gt; у всех работ одинаково и равно 1. Необходимо узнать, можно ли построить расписание, при котором все работы будут выполнены.&lt;br /&gt;
&lt;br /&gt;
==Алгоритм==&lt;br /&gt;
Идея алгоритма в том, чтобы из тех работ, которые уже можно выполнить, ставить в расписание ту, у которой наименьшее &amp;lt;tex&amp;gt;d_{i}&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;S&amp;lt;/tex&amp;gt; пустое.&lt;br /&gt;
Отсортируем работы по порядку их появления.&lt;br /&gt;
&lt;br /&gt;
Алгоритм &amp;lt;tex&amp;gt;1 | r_{i}, d_{i}, p_{i}=1 | -&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;j\leftarrow1;&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;time\leftarrow1;&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;FOR&amp;lt;/tex&amp;gt;  &amp;lt;tex&amp;gt;i := 1&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;TO&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;DO&amp;lt;/tex&amp;gt;&lt;br /&gt;
          &amp;lt;tex&amp;gt;BEGIN&amp;lt;/tex&amp;gt;&lt;br /&gt;
          &amp;lt;tex&amp;gt;IF&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;S=\varnothing&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;THEN&amp;lt;/tex&amp;gt;&lt;br /&gt;
               &amp;lt;tex&amp;gt;BEGIN&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;time:=r_{j}&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;END&amp;lt;/tex&amp;gt;&lt;br /&gt;
          &amp;lt;tex&amp;gt;WHILE&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;time=r_{j}&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;DO&amp;lt;/tex&amp;gt;&lt;br /&gt;
               &amp;lt;tex&amp;gt;BEGIN&amp;lt;/tex&amp;gt;&lt;br /&gt;
               Добавить &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;&lt;br /&gt;
               &amp;lt;tex&amp;gt;j:=j+1;&amp;lt;/tex&amp;gt;&lt;br /&gt;
               &amp;lt;tex&amp;gt;END&amp;lt;/tex&amp;gt;&lt;br /&gt;
          Пусть &amp;lt;tex&amp;gt;k\in S&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;d_{k}&amp;lt;/tex&amp;gt; минимально&lt;br /&gt;
          &amp;lt;tex&amp;gt;IF&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;d_{k}\le time&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;THEN&amp;lt;/tex&amp;gt;&lt;br /&gt;
               Расписание составить невозможно&lt;br /&gt;
          &amp;lt;tex&amp;gt;ELSE&amp;lt;/tex&amp;gt;&lt;br /&gt;
               &amp;lt;tex&amp;gt;BEGIN&amp;lt;/tex&amp;gt;&lt;br /&gt;
               Удалить &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;&lt;br /&gt;
               &amp;lt;tex&amp;gt;time:=time+1;&amp;lt;/tex&amp;gt;&lt;br /&gt;
               &amp;lt;tex&amp;gt;END&amp;lt;/tex&amp;gt;&lt;br /&gt;
          &amp;lt;tex&amp;gt;END&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Сложность алгоритма &amp;lt;tex&amp;gt;O(n\log n)&amp;lt;/tex&amp;gt; если в качестве &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; использовать структуру, которая позволяет поиск элемента с минимальным &amp;lt;tex&amp;gt;d_{i}&amp;lt;/tex&amp;gt; за &amp;lt;tex&amp;gt;O(\log n)&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;k&amp;lt;/tex&amp;gt;. Попробуем вставить эту работу в расписание. До блока её вставить нельзя, так как &amp;lt;tex&amp;gt;r_{i}&amp;lt;/tex&amp;gt; больше или равно времени начала блока. А в блоке нет пропусков, поэтому нужно поменять её с какой-то &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;-ой, которая уже стоит в этом блоке расписания. У всех таких работ &amp;lt;tex&amp;gt;d_{i}&amp;lt;/tex&amp;gt; меньше или равно &amp;lt;tex&amp;gt;d_{k}&amp;lt;/tex&amp;gt;, так как в алгоритме мы каждый раз брали работу с минимальным &amp;lt;tex&amp;gt;d_{i}&amp;lt;/tex&amp;gt;.   Но &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;-ую работу нельзя выполнить после &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-ой. Значит &amp;lt;tex&amp;gt;k&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>92.100.16.200</name></author>	</entry>

	</feed>