1sumu — различия между версиями
(→Алгоритм) |
|||
Строка 15: | Строка 15: | ||
<tex>S = S \setminus\{j\}</tex>; | <tex>S = S \setminus\{j\}</tex>; | ||
<tex>t</tex> <code>-=</code> <tex>p_j</tex>; | <tex>t</tex> <code>-=</code> <tex>p_j</tex>; | ||
+ | Алгоритм будет работать за <tex>O(n \log n)</tex>. | ||
{{Теорема | {{Теорема | ||
Строка 42: | Строка 43: | ||
Если применить алгоритм ко множеству <tex>\{1, \dots, j-1, j+1, \dots, n\}</tex>, то получим оптимальное расписание для <tex>(S, F\setminus \{j\})</tex>. Т.к. для задачи с меньшим числом станков им будет являться <tex>(S', F' \setminus \{j\})</tex>, то <tex>|S'| \leqslant |S|</tex>, и, следовательно, <tex>|S| = |S'|</tex> и <tex>P</tex> является оптимальным расписанием. | Если применить алгоритм ко множеству <tex>\{1, \dots, j-1, j+1, \dots, n\}</tex>, то получим оптимальное расписание для <tex>(S, F\setminus \{j\})</tex>. Т.к. для задачи с меньшим числом станков им будет являться <tex>(S', F' \setminus \{j\})</tex>, то <tex>|S'| \leqslant |S|</tex>, и, следовательно, <tex>|S| = |S'|</tex> и <tex>P</tex> является оптимальным расписанием. | ||
}} | }} | ||
+ | |||
==Литература== | ==Литература== | ||
* Peter Brucker. «Scheduling Algorithms» {{---}} «Springer», 2006 г. {{---}} 86 стр. {{---}} ISBN 978-3-540-69515-8 | * Peter Brucker. «Scheduling Algorithms» {{---}} «Springer», 2006 г. {{---}} 86 стр. {{---}} ISBN 978-3-540-69515-8 |
Версия 07:55, 22 июня 2012
Постановка задачи
Дан один станок и
работ, для которых заданы их времена выполнения на этом станке и дедлайны . Нужно успеть выполнить как можно больше работ.Алгоритм
Чтобы получить оптимальное расписание, будем строить максимальное множество
тех работ, которые успеют выполниться. Само расписание тогда будет состоять из всех работ из , упорядоченных по неубыванию дедлайнов. Будем добавлять в работы в порядке неубывания значений . Если вновь добавленная работа не успевает выполниться до дедлайна, то найдём и удалим из работу с самым большим временем выполнения.Отсортировать работы так, чтобы; ; ; ;+=
; находим в работу с наибольшим ; ;-=
;
Алгоритм будет работать за
.Теорема: |
Этот алгоритм строит оптимальное расписание. |
Доказательство: |
Разделим множество работ на множество тех, которые успеют выполниться - и которые не успеют - . Пусть - первая работа, которая была удалена из . Докажем, что существует оптимальное расписание , в котором . Обозначим через ту работу, которая была последней добавлена в . Тогда . При этом в последовательности работ не будет ни одной невыполненной работы, поскольку в последовательности все работы выполняются вовремя и . Заменим на и отсортируем все работы. Теперь рассмотрим оптимальное расписание , где . В нём существует последовательность : , такая, что
Такое всегда найдётся, т.к. , а последнее будет следовать из того, что . Из того, что следует, что выполнятся все работы из . С другой стороны, при любом расписании не будет выполнена какая-то работа из . Поэтому , при этом существует работа . Удалим работу из и заменим на . Если отсортируем получившееся множество, то все работы в нём выполнятся, т.к. , а оно обладает таким свойством. Если добавим работы к множеству и отсортируем его по неубыванию дедлайнов, то все работы в нём выполнятся, т.к. из следует, что. Таким образом, мы получили оптимальное расписание Если применить алгоритм ко множеству , в котором . Теперь докажем теорему индукцией по числу работ. Очевидно, при она выполняется. Предположим, что алгоритм верен для работы. Пусть - расписание, построенное алгоритмом, а - оптимальное расписание с . Тогда, по отимальности, . , то получим оптимальное расписание для . Т.к. для задачи с меньшим числом станков им будет являться , то , и, следовательно, и является оптимальным расписанием. |
Литература
- Peter Brucker. «Scheduling Algorithms» — «Springer», 2006 г. — 86 стр. — ISBN 978-3-540-69515-8