1ripi1sumwc — различия между версиями
Строка 3: | Строка 3: | ||
{{Задача | {{Задача | ||
|definition= | |definition= | ||
− | Дано <tex>n</tex> работ и один станок. Для каждой работы известно её время появления <tex>r_{i}</tex> и вес <tex>w_{i}</tex>. Время выполнения всех работ <tex>p_i</tex> равно <tex>1</tex>.Требуется выполнить все работы, чтобы значение <tex>\sum w_{i} C_{i}</tex> было минимальным, где <tex>C_{i}</tex> {{---}} время окончания работы. | + | Дано <tex>n</tex> работ и один станок. Для каждой работы известно её время появления <tex>r_{i}</tex> и вес <tex>w_{i}</tex>. Время выполнения всех работ <tex>p_i</tex> равно <tex>1</tex>. Требуется выполнить все работы, чтобы значение <tex>\sum w_{i} C_{i}</tex> было минимальным, где <tex>C_{i}</tex> {{---}} время окончания работы. |
}} | }} | ||
− | + | Перед решением этой задачи рассмотрим более простую. | |
− | ==Описание алгоритма== | + | <tex dpi = "200"> 1 \mid r_i,p_i = 1 \mid \sum f_i</tex> |
+ | {{Задача | ||
+ | |definition= | ||
+ | Дано <tex>n</tex> работ и один станок. Для каждой работы известно её время появления <tex>r_{i}</tex>. Время выполнения всех работ <tex>p_i</tex> равно <tex>1</tex>. Требуется выполнить все работы, чтобы значение <tex>\sum f_{i}</tex> было минимальным, где <tex>f_{i}</tex> {{---}} монотонная функция времени окончания работы <tex>C_{i}</tex>. | ||
+ | }} | ||
+ | |||
+ | ==Описание алгоритма простой задачи== | ||
+ | Нам нужно распределить <tex>n</tex> работ в разное время. Если мы назначим время <tex>t</tex> для работы <tex>i</tex> то цена будет <tex>f_i(t + 1)</tex>. Далее покажем что <tex>n</tex> временных промежутков будут рассмотрены. Таким образом, задача может быть решена за <tex>O(n^3)</tex>. Так как функция <tex>f_i</tex> монотонно неубывающая, то работы в расписании будем располагать как можно раньше. <tex>n</tex> временных интервалов <tex>t_i</tex> для <tex>n</tex> работ могут быть получены с помощью следующего алгоритма, где предполагается что рабочие места нумеруются так: | ||
+ | |||
+ | <tex> r_1 <= r_2 <=... <= r_n</tex> | ||
+ | ==Псевдокод простой задачи== | ||
+ | <tex>t_1 \leftarrow r_1 </tex> | ||
+ | '''FOR''' <tex> i \leftarrow 2</tex> '''TO''' <tex>n</tex> '''DO''' | ||
+ | <tex> t_i \leftarrow </tex> '''MAX'''<tex>(r_i, \ t_{i-1} - 1)</tex> | ||
+ | |||
+ | ==Описание алгоритма основной задачи== | ||
Пусть <tex>time</tex> {{---}} текущий момент времени.<br/> | Пусть <tex>time</tex> {{---}} текущий момент времени.<br/> | ||
Для каждого очередного значения <tex>time</tex>, которое изменяется от <tex>0</tex> до времени окончания последней работы, будем: | Для каждого очередного значения <tex>time</tex>, которое изменяется от <tex>0</tex> до времени окончания последней работы, будем: | ||
Строка 16: | Строка 31: | ||
</ol> | </ol> | ||
− | ==Доказательство корректности алгоритма== | + | ==Доказательство корректности алгоритма основной задачи== |
{{Теорема | {{Теорема | ||
|statement= | |statement= | ||
Строка 32: | Строка 47: | ||
}} | }} | ||
− | ==Псевдокод== | + | ==Псевдокод основной задачи== |
<tex> S \leftarrow \{1 \dots n\}</tex> | <tex> S \leftarrow \{1 \dots n\}</tex> | ||
<tex> time \leftarrow 0</tex> | <tex> time \leftarrow 0</tex> | ||
Строка 50: | Строка 65: | ||
== Источники информации == | == Источники информации == | ||
+ | * P. Brucker. Scheduling Algorithms (2006), 5th edition, стр. 19 - 20 | ||
* P. Brucker. Scheduling Algorithms (2006), 5th edition, стр. 84 - 85 | * P. Brucker. Scheduling Algorithms (2006), 5th edition, стр. 84 - 85 | ||
[[Категория: Дискретная математика и алгоритмы]] | [[Категория: Дискретная математика и алгоритмы]] | ||
[[Категория: Теория расписаний]] | [[Категория: Теория расписаний]] |
Версия 12:14, 2 июня 2015
Задача: |
Дано | работ и один станок. Для каждой работы известно её время появления и вес . Время выполнения всех работ равно . Требуется выполнить все работы, чтобы значение было минимальным, где — время окончания работы.
Перед решением этой задачи рассмотрим более простую.
Задача: |
Дано | работ и один станок. Для каждой работы известно её время появления . Время выполнения всех работ равно . Требуется выполнить все работы, чтобы значение было минимальным, где — монотонная функция времени окончания работы .
Содержание
Описание алгоритма простой задачи
Нам нужно распределить
работ в разное время. Если мы назначим время для работы то цена будет . Далее покажем что временных промежутков будут рассмотрены. Таким образом, задача может быть решена за . Так как функция монотонно неубывающая, то работы в расписании будем располагать как можно раньше. временных интервалов для работ могут быть получены с помощью следующего алгоритма, где предполагается что рабочие места нумеруются так:
Псевдокод простой задачи
FOR TO DO MAX
Описание алгоритма основной задачи
Пусть
Для каждого очередного значения , которое изменяется от до времени окончания последней работы, будем:
- Выбирать работу из множества невыполненных работ, у которой , а значение максимально.
- Если мы смогли найти работу , то выполняем её в момент времени и удаляем из множества невыполненных работ.
- Увеличиваем на один.
Доказательство корректности алгоритма основной задачи
Теорема: |
Расписание, построенное данным алгоритмом, является корректным и оптимальным. |
Доказательство: |
Доказательство будем вести от противного. Первая скобка отрицательная: |
Псевдокод основной задачи
WHILE IF AND AND IF
Сложность алгоритма
Множество
станет пустым не позже, чем через шагов цикла. Определить максимум в множестве можно за время , используя , например, очередь с приоритетами. Значит общее время работы алгоритма
Источники информации
- P. Brucker. Scheduling Algorithms (2006), 5th edition, стр. 19 - 20
- P. Brucker. Scheduling Algorithms (2006), 5th edition, стр. 84 - 85