1sumu — различия между версиями
(Новая страница: «==Постановка задачи== Дан один станок и <tex>n</tex> работ, для которых заданы их времена выполн...») |
(→Алгоритм) |
||
Строка 18: | Строка 18: | ||
{{Теорема | {{Теорема | ||
|statement= | |statement= | ||
− | Этот алгоритм строит оптимальное расписание | + | Этот алгоритм строит оптимальное расписание. |
|proof= | |proof= | ||
+ | Разделим множество работ <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>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>F' = \{\pi(r+1), \dots, \pi(n)\}</tex>; | ||
+ | |||
+ | * <tex>d_{\pi(1)} \leqslant \dots \leqslant d_{\pi(r)}</tex>; | ||
+ | |||
+ | * <tex>\{\pi(1), \dots, \pi(m)\} \subseteq \{1, \dots, k\}</tex>; | ||
+ | |||
+ | * <tex>\{\pi(m+1), \dots, \pi(r)\} \subseteq \{k+1, \dots, n\}</tex>; | ||
+ | |||
+ | * <tex>j \in \{\pi(1), \dots, \pi(m)\}</tex>; | ||
+ | |||
+ | Такое <tex>m</tex> всегда найдётся, т.к. <tex>d_1 \leqslant d_2 \leqslant \dots \leqslant d_n</tex>, а последнее будет следовать из того, что <tex>j \in S' \cap \{1, \dots, k\}</tex>. Из того, что <tex>\{\pi(1), \dots, \pi(m)\} \subseteq S'</tex> следует, что выполнятся все работы из <tex>\{\pi(1), \dots, \pi(m)\}</tex>. С другой стороны, при любом расписании не будет выполнена какая-то работа из <tex>\{1, \dots, k\}</tex>. Поэтому <tex>\{\pi(1), \dots, \pi(m)\} \subset \{1, \dots, k\}</tex>, при этом существует работа <tex>h \notin \{\pi(1), \dots, \pi(m)\}</tex>. Удалим работу <tex>j</tex> из <tex>\{\pi(1), \dots, \pi(m)\}</tex> и заменим на <tex>h</tex>. Если отсортируем получившееся множество, то все работы в нём выполнятся, т.к. <tex>\{\pi(1), \dots, \pi(m)\} \cup \{h\} \cap \{j\} \subseteq \{1, \dots, k\} \setminus \{j\}</tex>, а оно обладает таким свойством. Если добавим работы <tex>\pi(m+1), \dots, \pi(r)</tex> к множеству <tex>\{\pi(1), \dots, \pi(m)\} \cup \{h\} \cap \{j\}</tex> и отсортируем его по неубыванию дедлайнов, то все работы в нём выполнятся, т.к. из <tex>p_h \leqslant p_j</tex> следует, что | ||
+ | |||
+ | <tex>\sum_{i=1}^{m} p_{\pi(i)} - p_j + p_h \leqslant \sum_{i=1}^{m} p_{\pi(i)}</tex>. | ||
+ | |||
+ | Таким образом, мы получили оптимальное расписание <tex>P = (S, F)</tex>, в котором <tex>j \in F</tex>. | ||
+ | Теперь докажем теорему индукцией по числу работ. Очевидно, при <tex>n = 1</tex> она выполняется. Предположим, что алгоритм верен для <tex>n - 1</tex> работы. Пусть <tex>P = (S, T)</tex> - расписание, построенное алгоритмом, а <tex>P' = (S', T')</tex> - оптимальное расписание с <tex>j \in F'</tex>. Тогда, по отимальности, <tex>|S| \leqslant |S'|</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> является оптимальным расписанием. | ||
}} | }} |
Версия 07:45, 22 июня 2012
Постановка задачи
Дан один станок и
работ, для которых заданы их времена выполнения на этом станке и дедлайны . Нужно успеть выполнить как можно больше работ.Алгоритм
Чтобы получить оптимальное расписание, будем строить максимальное множество
тех работ, которые успеют выполниться. Само расписание тогда будет состоять из всех работ из , упорядоченных по неубыванию дедлайнов. Будем добавлять в работы в порядке неубывания значений . Если вновь добавленная работа не успевает выполниться до дедлайна, то найдём и удалим из работу с самым большим временем выполнения.Отсортировать работы так, чтобы; ; ; ;+=
; находим в работу с наибольшим ; ;-=
;
Теорема: |
Этот алгоритм строит оптимальное расписание. |
Доказательство: |
Разделим множество работ на множество тех, которые успеют выполниться - и которые не успеют - . Пусть - первая работа, которая была удалена из . Докажем, что существует оптимальное расписание , в котором . Обозначим через ту работу, которая была последней добавлена в . Тогда . При этом в последовательности работ не будет ни одной невыполненной работы, поскольку в последовательности все работы выполняются вовремя и . Заменим на и отсортируем все работы. Теперь рассмотрим оптимальное расписание , где . В нём существует последовательность : , такая, что
Такое всегда найдётся, т.к. , а последнее будет следовать из того, что . Из того, что следует, что выполнятся все работы из . С другой стороны, при любом расписании не будет выполнена какая-то работа из . Поэтому , при этом существует работа . Удалим работу из и заменим на . Если отсортируем получившееся множество, то все работы в нём выполнятся, т.к. , а оно обладает таким свойством. Если добавим работы к множеству и отсортируем его по неубыванию дедлайнов, то все работы в нём выполнятся, т.к. из следует, что. Таким образом, мы получили оптимальное расписание Если применить алгоритм ко множеству , в котором . Теперь докажем теорему индукцией по числу работ. Очевидно, при она выполняется. Предположим, что алгоритм верен для работы. Пусть - расписание, построенное алгоритмом, а - оптимальное расписание с . Тогда, по отимальности, . , то получим оптимальное расписание для . Т.к. для задачи с меньшим числом станков им будет являться , то , и, следовательно, и является оптимальным расписанием. |