J2pij1Lmax — различия между версиями
(→Описание решения) |
(→Доказательство) |
||
Строка 96: | Строка 96: | ||
|id=lemma6.12 | |id=lemma6.12 | ||
|statement=Пусть <tex>Y = (A(t), B(t))</tex> — расписание, где <tex>B(t) = \emptyset</tex> <tex>(A(t) = \emptyset)</tex>. Тогда для каждого <tex>s > t</tex>, где <tex>B(s) = O_{ij}</tex> <tex>(A(s) = O_{ij})</tex> выполняется <tex>A(s -1) = O_{i, j - 1}</tex> <tex>(B(s - 1) = O_{i, j -1}))</tex> | |statement=Пусть <tex>Y = (A(t), B(t))</tex> — расписание, где <tex>B(t) = \emptyset</tex> <tex>(A(t) = \emptyset)</tex>. Тогда для каждого <tex>s > t</tex>, где <tex>B(s) = O_{ij}</tex> <tex>(A(s) = O_{ij})</tex> выполняется <tex>A(s -1) = O_{i, j - 1}</tex> <tex>(B(s - 1) = O_{i, j -1}))</tex> | ||
− | |proof={{в | + | |proof= Докажем по индукции по <tex>s</tex>, что если <tex>B(s) = O_{ij}</tex> и <tex>s > t</tex>, то <tex>A(s -1) = O_{i, j - 1}</tex>. Это, очевидно, верно при <tex>s = t+1</tex> так как если <tex>B(t+1) = O_{ij}</tex> и <tex>A(t)</tex> не соответствует задаче <tex>i</tex>, то <tex>B(t) = null</tex> означает что операция <tex>O_ij</tex> должна быть запланирована в расписании ранее. |
+ | |||
+ | Предположим теперь что лемма верна для всех <tex>v</tex> при <tex>t < v < s</tex> и <tex>B(s) = O_ij</tex> . Выберем максимальное <tex>l</tex>, такое что <tex>t < l < s</tex> и <tex>B(l) = null</tex>. По предположению индукции, <tex>A(v- −1)</tex> и <tex>B(v)</tex> соответствуют одной и той же задаче для <tex>v = l + 1,...,s —- 1</tex>. Пусть <tex>A(s - 1</tex>) не соответствует задаче <tex>i</tex>. Тогда для каждого <tex> v ∈ {l, l + 1, . . . , s - 1}</tex> операция <tex>A(v)</tex> не соответствует задаче <tex>i</tex>. Таким образом, <tex>O_ij</tex> может быть обработан в момент <tex>l</tex>, что противоречит тому факту, что <tex>Y</tex> является расписанием. | ||
+ | |||
}} | }} | ||
Версия 14:31, 11 мая 2016
Условие задачи
В нотации Грэхема задача носит название
Дано
работ и две машины, обозначенные как и .-тая работа состоит из операций , которые должны быть выполнены последовательно и, при этом, если операция была совершена на машине , то операция должна быть совершена на машине .
Задача заключается в том, что для данного каждой
-той работе дедлайна необходимо найти достижимое расписание с наименьшими максимальным временем опоздания:
Описание решения
Судя по условию,
-тая работа может характеризоваться двумя значениями: количество операций и машиной, на которой была совершена первая операция. Пусть — общее количество операций.Допустим, самым ранним моментом, когда операция может начать выполняться, будет момент времени 0, а верхнюю границу момента начала выполнения последней операции обозначим за
. К примеру, мы можем выбрать . Тогда расписание можно представить как два списка и , где , если операция должна выполниться на машине в момент времени и , если машина простаивает в этот момент. И для каждой операции , выполняющейся на машине существует , для которого . Аналогично для . Расписание достижимо тогда и только тогда, когда из следует для некоторого , и первая операция для каждой работы запланирована на нужной машине. Перестановку всех операций будем называть списком. Для данного списка осуществимое расписание может быть создано следующим способом: планируем выполнять операции в порядке, соответствующим , причем каждую операцию стараемся выполнить как можно раньше. Подобное расписание будем называть соответствующим расписанием. — время окончания работы в достижимом расписании можно рассчитать как:или — операция -той работы}
Задача заключается в том, что для данного каждой работе
дедлайна мы хотим найти достижимое расписание с наименьшими максимальным временем опоздания:
Следующий алгоритм решает эту задачу:
- Введём для каждой операции величину
- Создадим список всех операций , упорядоченный в порядке неубывания значений
- Найдем соответствующее списку расписание.
Этот алгоритм может быть реализованным с асимптотикой
.Мы предполагаем, что
для и хотя бы для одной работы . Иначе, вычтем из всех минимальное значение по .Так как
для всех и справедливо как минимум для одной работы . К тому же, можно предположить, что . Таким образом, работы с , то есть c , можно смело игнорировать. Они не влияют на значение улучшаемой функции , так как для некого можно выполнять эти работы в любом порядке после всех остальных. Для оставшихся операций мы имеем:
Каждую операцию мы кладём в соответствующий список (на самом деле это должен быть heap для хорошей асимптотики)
, где . На втором шаге мы планируем операции соответственно возрастающему по номеру списка порядку, где операции из одного списка могут выполнятся в произвольном порядке.Алгоритм
Давайте детально рассмотрим алгоритм.
и обозначают первый период времени , когда соответствующие машины и бездействуют. обозначает время окончания последней запланированной операции -той работы. — множество работ, гдеmain() for k: -r + 1 to r - 1= ; Z = ; for i: 1 to n if < r for j: 1 to n_i добавить в else добавить работу i в Z for i: 1 to n LAST(i) = 0; T1 = 0; T2 = 0; for k: -r + 1 to r - 1 while Выбрать задание из = ; schedule( ) while Выбрать работу i из Z Z = ; for j: 1 to schedule( )
schedule() if == A if T1 < LAST(i) t = LAST(i) A(t) = (*) else t = T1; A(t) = ; while T1 = T1 + 1; else if T2 < LAST(i) t = LAST(i) B(t) = (**) else t = T2; A(t) = ; while T2 = T2 + 1; LAST(i) = t + 1
Очевидно, что количество шагов алгоритма ограничено
Доказательство
Для доказательства того, что алгоритм решения задачи корректен, необходимо показать то, что он строит достижимое расписание. Это справедливо тогда и только тогда, когда до исполнения строчек (*) и (**) пусты A(t) и B(t) соответственно. Иначе две разные операции будут выполняться в один момент времени на одной машине. Для того, чтобы показать достижимость докажем лемму.
Лемма: |
Пусть — расписание, где . Тогда для каждого , где выполняется |
Доказательство: |
Докажем по индукции по Предположим теперь что лемма верна для всех , что если и , то . Это, очевидно, верно при так как если и не соответствует задаче , то означает что операция должна быть запланирована в расписании ранее. при и . Выберем максимальное , такое что и . По предположению индукции, и соответствуют одной и той же задаче для . Пусть ) не соответствует задаче . Тогда для каждого операция не соответствует задаче . Таким образом, может быть обработан в момент , что противоречит тому факту, что является расписанием. |
Теорема: |
Пусть — операция, которую планируют строчкой (*) или (**) и . Тогда |
Доказательство: |
Эта статья находится в разработке! |
Лемма: |
Если существует расписание без опозданий, то данный алгоритм построит расписание без опозданий. |
Доказательство: |
Эта статья находится в разработке! |
Теорема: |
Расписание, построенное данным алгоритмом, оптимально. |
Доказательство: |
Эта статья находится в разработке! |
Источники
- Peter Brucker. «Scheduling Algorithms» — «Springer», 2006 г. — 180 стр. — ISBN 978-3-540-69515-8