Pintreepi1Lmax — различия между версиями
(Новая страница: «<tex dpi = "200">P \mid Intree, p_{i} = 1 \mid L_{max}</tex> {{Задача |definition=Рассмотрим задачу на нахождение распис...») |
(нет различий)
|
Версия 17:35, 14 мая 2016
Задача: |
Рассмотрим задачу на нахождение расписания:
|
Описание алгоритма
Идея
Все вершины хранятся в дереве (англ. Intree), которое имеет несколько корней и один лист.
Работы хранятся в дереве, состоящем из
вершин с фиктивной нулевой работой, которая является родителем тех вершин, у которых изначально его не было. В intree-дереве у одной вершины может быть два и более родителей. Решение задачи состоит из двух шагов: на первом шаге мы меняем сроки выполнения работ в соответствии с их очередностью.На первом шаге изменения сроков состоит в следующем: для всех
таких, что существует ребро из в будем менять на . На втором шаге работы расставляются в неубывающем порядке сроков.Первый шаг
Алгоритм изменения сроков:
deque = {ii является листом} while (deque not empty) i = stack.remove_first() for (j j является предком i): stack.add_last(j)
Лемма: |
Работа с новым сроком в расписании не имеет опозданий тогда и только тогда, когда она не имела опозданий с оригинальным сроком . |
Доказательство: |
В одну сторону утверждение очевидно: т.к. Докажем лемму в другую сторону: пусть у нас были сроки , значит, если опозданий не было со значениями , их не будет и со значениями . и мы их заменили на в соответствии с приведенным алгоритмом. Пронумеруем вершины от до в соответствии с обратным порядком обхода в алгоритме изменения сроков. В соответствии с расписанием, время, когда деталь закончит обрабатываться на станке удовлетворяет неравенству для всех . Тогда мы имеем . Если для какого-то мы имеем для и существует работа из этого промежутка, что вершина с номером является ее родителем, тогда |
Второй шаг
На втором этапе алгоритма работы сортируются в неубывающем порядке их дедлайнов. Предполагается, что работы занумерованы в соответствии с предыдущим пунктом, т.е.
, если .В переменной
хранится время, когда станок освободится.В массиве
хранится информация о максимальном времени завершении обработки родителя.Массив
хранит информацию о количестве работ, готовых к исполнению (находящихся в очереди) в момент времени .Массив
хранит информацию о начале выполнения работы .F = 0 for (i = 1..n) r[i] = 0 for (t = 0..n) c[t] = 0 for (i = 1..n) t = max(r[i], F) x[i] = t c[t] = c[t] + 1 if (n[t] == m) F = t + 1 j = s[i] r[j] = max (r[j], t + 1)
Расписание, сгенерированное этим алгоритмом имеет важное свойство: число заданий в очереди в любой момент времени
меньше, чем в момент . Действительно, пусть во время мы выполняем работ, и хотя бы работ готовы к выполению в момент времени . Но т.к. , значит каждой из работ предшествовала как минимум одна, поскольку у всех вершин, кроме корней, есть как минимум один предок. Значит, в момент времени исполнялось не менее работ, противоречие.Лемма: |
Если существует такое расписание, в котором ни одна из работ не будет выполнена с опозданием, то тогда это свойство сохранится в построенном данным алгоритмом расписании |
Доказательство: |
Предположим, что существует работа из расписания, построенного алгоритмом. В таком случае существует работа, которая опоздала по отношению к измененным срокам. Возьмем наименьшее такое, что . Пусть — наибольшее из удовлетворяющих условию Такое существует, потому что иначе работ с находятся в очереди до . Работа к ним не принадлежит, поскольку , а значит, что должны быть в очереди в момент времени и ни одна работа не должна опаздывать. Противоречие. Любая работа с и должна иметь предка, начавшего работать в момент времени . Теперь рассмотрим два случая:Первый случай. .Мы имеем . Таким образом, предок работы должен начать работать во время и закончить в . Но т.к. , работа так же опоздает, однако было выбрано минимальным. Противоречие.Второй случай. В этом случае . работ таких, что начнут работать в момент времени , каждая из которых имеет как минимум работающего в предка. По структуре дерева все эти предки различны, кроме того, если — такой предок , тогда , что противоречит выбору |
Теорема: |
Данный алгоритм корректно решает задачу |
Доказательство: |
Пусть | — оптимальное значение. В таком случае, существует расписание, удовлетворяющее , что эквивалетно выражению для . По первой лемме расписание , построенное для сдвинутых дат удовлетворяет данным выражениям. Таким образом, оно оптимально. Нетрудно заметить, что идентично расписанию, построенному алгоритмом, т.к. для
Источники информации
- Peter Brucker «Scheduling Algorithms», fifth edition, Springer — с. 151-156 ISBN 978-3-540-69515-8