1sumu — различия между версиями
Shersh (обсуждение | вклад) |
|||
| Строка 1: | Строка 1: | ||
| − | + | {{Шаблон:Задача | |
| + | |definition = | ||
Дан один станок и <tex>n</tex> работ, для которых заданы их времена выполнения на этом станке <tex>p_i</tex> и дедлайны <tex>d_i</tex>. Нужно успеть выполнить как можно больше работ. | Дан один станок и <tex>n</tex> работ, для которых заданы их времена выполнения на этом станке <tex>p_i</tex> и дедлайны <tex>d_i</tex>. Нужно успеть выполнить как можно больше работ. | ||
| + | }} | ||
==Алгоритм== | ==Алгоритм== | ||
Чтобы получить оптимальное расписание, будем строить максимальное множество <tex>S</tex> тех работ, которые успеют выполниться. Само расписание тогда будет состоять из всех работ из <tex>S</tex>, упорядоченных по неубыванию дедлайнов. | Чтобы получить оптимальное расписание, будем строить максимальное множество <tex>S</tex> тех работ, которые успеют выполниться. Само расписание тогда будет состоять из всех работ из <tex>S</tex>, упорядоченных по неубыванию дедлайнов. | ||
Версия 14:51, 29 мая 2016
| Задача: |
| Дан один станок и работ, для которых заданы их времена выполнения на этом станке и дедлайны . Нужно успеть выполнить как можно больше работ. |
Алгоритм
Чтобы получить оптимальное расписание, будем строить максимальное множество тех работ, которые успеют выполниться. Само расписание тогда будет состоять из всех работ из , упорядоченных по неубыванию дедлайнов. Будем добавлять в работы в порядке неубывания значений . Если вновь добавленная работа не успевает выполниться до дедлайна, то найдём и удалим из работу с самым большим временем выполнения.
// Отсортировать работы так, чтобы ; ; for i := 1 to n do ;+=; if находим в работу с наибольшим ; ;-=;
Алгоритм будет работать за .
| Теорема: |
Этот алгоритм строит оптимальное расписание. |
| Доказательство: |
|
Разделим множество работ на множество тех, которые успеют выполниться - и которые не успеют - . Пусть - первая работа, которая была удалена из . Докажем, что существует оптимальное расписание , в котором . Обозначим через ту работу, которая была последней добавлена в . Тогда . При этом в последовательности работ не будет ни одной невыполненной работы, поскольку в последовательности все работы выполняются вовремя и . Заменим на и отсортируем все работы. Теперь рассмотрим оптимальное расписание , где . В нём существует последовательность : , такая, что
Такое всегда найдётся, т.к. , а последнее будет следовать из того, что . Из того, что следует, что выполнятся все работы из . С другой стороны, при любом расписании не будет выполнена какая-то работа из . Поэтому , при этом существует работа . Удалим работу из и заменим на . Если отсортируем получившееся множество, то все работы в нём выполнятся, т.к. , а оно обладает таким свойством. Если добавим работы к множеству и отсортируем его по неубыванию дедлайнов, то все работы в нём выполнятся, т.к. из следует, что . Таким образом, мы получили оптимальное расписание , в котором . Теперь докажем теорему индукцией по числу работ. Очевидно, при она выполняется. Предположим, что алгоритм верен для работы. Пусть - расписание, построенное алгоритмом, а - оптимальное расписание с . Тогда, по отимальности, . Если применить алгоритм ко множеству , то получим оптимальное расписание для . Т.к. для задачи с меньшим числом станков им будет являться , то , и, следовательно, и является оптимальным расписанием. |
Источники информации
- Peter Brucker. «Scheduling Algorithms» — «Springer», 2006 г. — 86 стр. — ISBN 978-3-540-69515-8