1sumu — различия между версиями
м (rollbackEdits.php mass rollback) |
|||
(не показаны 3 промежуточные версии 2 участников) | |||
Строка 25: | Строка 25: | ||
|proof= | |proof= | ||
Разделим множество работ <tex>P</tex> на два: <tex>S</tex> — множество работ, которые успеют выполниться и <tex>F</tex> — работы, которые не успеют выполниться. | Разделим множество работ <tex>P</tex> на два: <tex>S</tex> — множество работ, которые успеют выполниться и <tex>F</tex> — работы, которые не успеют выполниться. | ||
− | Пусть <tex>j</tex> — первая работа, которая была удалена из <tex>S</tex>. Докажем, что существует оптимальное расписание <tex>P = (S, T)</tex>, в котором <tex>j \in F</tex>. Обозначим через <tex>k</tex> ту работу, которая была последней добавлена в <tex>S</tex>. Тогда <tex>p_j = \max\limits_{i = 1 \dots k} p_i</tex>. При этом в последовательности работ <tex>1, 2, \dots, j-1 j+1, dots, k</tex> не будет ни одной невыполненной работы, поскольку в последовательности <tex>1, 2, \dots, k-1</tex> все работы выполняются вовремя и <tex>p_k \leqslant p_j</tex>. Заменим <tex>j</tex> на <tex>k</tex> и отсортируем все работы. | + | Пусть <tex>j</tex> — первая работа, которая была удалена из <tex>S</tex>. Докажем, что существует оптимальное расписание <tex>P = (S, T)</tex>, в котором <tex>j \in F</tex>. Обозначим через <tex>k</tex> ту работу, которая была последней добавлена в <tex>S</tex>. Тогда <tex>p_j = \max\limits_{i = 1 \dots k} p_i</tex>. При этом в последовательности работ <tex>1, 2, \dots, j-1, j+1, \dots, k</tex> не будет ни одной невыполненной работы, поскольку в последовательности <tex>1, 2, \dots, k-1</tex> все работы выполняются вовремя и <tex>p_k \leqslant p_j</tex>. Заменим <tex>j</tex> на <tex>k</tex> и отсортируем все работы. |
Теперь рассмотрим оптимальное расписание <tex>P' = (S', F')</tex>, где <tex>j \in S'</tex>. В нём существует последовательность <tex>\pi</tex>: <tex>\pi(1), \dots, \pi(m), \dots, \pi(r), \pi(r+1), \dots, \pi(n)</tex>, такая, что | Теперь рассмотрим оптимальное расписание <tex>P' = (S', F')</tex>, где <tex>j \in S'</tex>. В нём существует последовательность <tex>\pi</tex>: <tex>\pi(1), \dots, \pi(m), \dots, \pi(r), \pi(r+1), \dots, \pi(n)</tex>, такая, что | ||
Строка 49: | Строка 49: | ||
==Источники информации== | ==Источники информации== | ||
* 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 | ||
+ | |||
+ | == См. также == | ||
+ | * [[Классификация задач]] | ||
+ | * [[1ripi1sumwc|<tex>1 \mid r_{i}, p_i=1\mid \sum w_{i}C_{i}</tex>]] | ||
+ | * [[1pi1sumwu|<tex>1 \mid p_{i} = 1 \mid \sum w_{i}U_{i}</tex>]] | ||
+ | * [[1ripi1sumf|<tex>1 \mid r_i, p_i = 1 \mid \sum f_i</tex>]] | ||
[[Категория: Дискретная математика и алгоритмы]] | [[Категория: Дискретная математика и алгоритмы]] | ||
[[Категория: Теория расписаний]] | [[Категория: Теория расписаний]] |
Текущая версия на 19:31, 4 сентября 2022
Задача: |
Дан один станок и | работ, для которых заданы их времена выполнения на этом станке и дедлайны . Нужно успеть выполнить как можно больше работ.
Алгоритм
Чтобы получить оптимальное расписание, будем строить максимальное множество
тех работ, которые успеют выполниться. Само расписание тогда будет состоять из всех работ из , упорядоченных по неубыванию дедлайнов. Будем добавлять в работы в порядке неубывания значений . Если вновь добавленная работа не успевает выполниться до дедлайна, то найдём и удалим из работу с самым большим временем выполнения.Отсортировать работы так, чтобыfor i = 1 to n do+=
if находим в работу с наибольшим-=
Алгоритм будет работать за
.Оптимальность и корректность
Теорема: |
Приведенный выше алгоритм строит оптимальное расписание. |
Доказательство: |
Разделим множество работ на два: — множество работ, которые успеют выполниться и — работы, которые не успеют выполниться. Пусть — первая работа, которая была удалена из . Докажем, что существует оптимальное расписание , в котором . Обозначим через ту работу, которая была последней добавлена в . Тогда . При этом в последовательности работ не будет ни одной невыполненной работы, поскольку в последовательности все работы выполняются вовремя и . Заменим на и отсортируем все работы. Теперь рассмотрим оптимальное расписание , где . В нём существует последовательность : , такая, что
Такое всегда найдётся, т.к. , а последнее будет следовать из того, что . Из того, что следует, что выполнятся все работы из . С другой стороны, при любом расписании не будет выполнена какая-то работа из . Поэтому , при этом существует работа . Удалим работу из и заменим на . Если отсортируем получившееся множество, то все работы в нём выполнятся, т.к. , а оно обладает таким свойством. Если добавим работы к множеству и отсортируем его по неубыванию дедлайнов, то все работы в нём выполнятся, т.к. из следует, что. Таким образом, мы получили оптимальное расписание Если применить алгоритм ко множеству , в котором . Теперь докажем теорему индукцией по числу работ. Очевидно, при она выполняется. Предположим, что алгоритм верен для работы. Пусть — расписание, построенное алгоритмом, а — оптимальное расписание с . Тогда, по отимальности, . , то получим оптимальное расписание для . Т.к. для задачи с меньшим числом станков им будет являться , то , и, следовательно, и является оптимальным расписанием. |
Источники информации
- Peter Brucker. «Scheduling Algorithms» — «Springer», 2006 г. — 86 стр. — ISBN 978-3-540-69515-8