1pi=1wirisumwi(ci - pi -ri) — различия между версиями
Dimitrova (обсуждение | вклад) (→Псевдокод) |
Dimitrova (обсуждение | вклад) (→Описание алгоритма) |
||
| Строка 9: | Строка 9: | ||
==Описание алгоритма== | ==Описание алгоритма== | ||
Пусть <tex>time</tex> {{---}} текущий момент времени.<br/> | Пусть <tex>time</tex> {{---}} текущий момент времени.<br/> | ||
| − | Для каждого очередного значения <tex>time</tex>, которое изменяется от <tex>0</tex> до времени окончания | + | Для каждого очередного значения <tex>time</tex>, которое изменяется от <tex>0</tex> до времени окончания последней работы, будем: |
<ol> | <ol> | ||
| − | <li> Выбирать работу <tex>j</tex> из множества невыполненных работ, у которой <tex>r_{i} \le time</tex> | + | <li> Выбирать работу <tex>j</tex> из множества невыполненных работ, у которой <tex>r_{i} \le time</tex>, а значение <tex>w_{i}</tex> максимально.</li> |
| − | <li> Если мы смогли найти работу <tex>j</tex>, то выполняем её в момент времени <tex>time</tex></li> | + | <li> Если мы смогли найти работу <tex>j</tex>, то выполняем её в момент времени <tex>time</tex> и удаляем из множества невыполненных работ.</li> |
<li> Увеличиваем <tex>time</tex> на один.</li> | <li> Увеличиваем <tex>time</tex> на один.</li> | ||
</ol> | </ol> | ||
Версия 22:27, 18 июня 2012
Содержание
Постановка задачи
Рассмотрим задачу:
- Дано работ и один станок.
- Для каждой работы известно её время появления и вес . Время выполнения всех работ равно .
Требуется выполнить все работы, чтобы значение было минимальным.
Описание алгоритма
Пусть — текущий момент времени.
Для каждого очередного значения , которое изменяется от до времени окончания последней работы, будем:
- Выбирать работу из множества невыполненных работ, у которой , а значение максимально.
- Если мы смогли найти работу , то выполняем её в момент времени и удаляем из множества невыполненных работ.
- Увеличиваем на один.
Доказательство корректности алгоритма
| Теорема: |
Расписание, построенное данным алгоритмом, является корректным и оптимальным. |
| Доказательство: |
|
Доказательство будем вести от противного. Первая скобка отрицательная: . Вторая скобка тоже отрицательная из того, что в работа с весом выполняется раньше, значит её вес должен быть больше . |
Псевдокод
while if
Сложность алгоритма
Множество станет пустым не позже, чем через шагов цикла. Определить максимум в множестве можно за время , используя , например, очередь с приоритетами. Значит общее время работы алгоритма