1ridipi1 — различия между версиями
Строка 1: | Строка 1: | ||
− | |||
− | |||
− | |||
==Постановка задачи== | ==Постановка задачи== | ||
Дан один станок на котором нужно выполнить <tex>n</tex> работ. Для каждой работы известны моменты времени, когда можно начинать её выполнять - <tex>r_{i}</tex> и когда необходимо закончить её выполнение - <tex>d_{i}</tex>. Время выполнения <tex>p_{i}</tex> у всех работ одинаково и равно 1. Необходимо узнать, можно ли построить хорошее расписание (при котором все работы будут выполнены). | Дан один станок на котором нужно выполнить <tex>n</tex> работ. Для каждой работы известны моменты времени, когда можно начинать её выполнять - <tex>r_{i}</tex> и когда необходимо закончить её выполнение - <tex>d_{i}</tex>. Время выполнения <tex>p_{i}</tex> у всех работ одинаково и равно 1. Необходимо узнать, можно ли построить хорошее расписание (при котором все работы будут выполнены). | ||
Строка 38: | Строка 35: | ||
==Доказательство корректности алгоритма== | ==Доказательство корректности алгоритма== | ||
Пусть с помощью нашего алгоритма составить хорошее расписание не удалось. Докажем, что в этом случае хорошего расписания не существует. | Пусть с помощью нашего алгоритма составить хорошее расписание не удалось. Докажем, что в этом случае хорошего расписания не существует. | ||
− | Заметим, что расписание состоит из | + | Заметим, что расписание состоит из непрерывных блоков, между которыми есть пропуски - все поступившие работы выполнены, а новых работ ещё не появилось. Расписание может состоять из одного блока. |
− | Рассмотрим первый блок, для которого не получилось составить расписание. Возьмем первую работу, для которой не нашлось места. Пусть её индекс будет <tex>k</tex>. Попробуем вставить эту работу в расписание. До блока её вставить нельзя, так как <tex>r_{i}</tex> больше или равно | + | Рассмотрим первый блок, для которого не получилось составить расписание. Возьмем в нём первую работу, для которой не нашлось места. Пусть её индекс будет <tex>k</tex>. Попробуем вставить эту работу в расписание. До блока её вставить нельзя, так как <tex>r_{i}</tex> больше или равно времени начала блока. А в блоке нет пропусков, поэтому нужно поменять её с какой-то <tex>i</tex>-ой, которая уже стоит в этом блоке расписания. У всех таких работ <tex>d_{i}</tex> меньше или равно <tex>d_{k}</tex>, так как в алгоритме мы каждый раз брали работу с минимальным <tex>d_{i}</tex>. Но <tex>i</tex>-ую работу нельзя выполнить после <tex>k</tex>-ой. Значит <tex>k</tex>-ую работу выполнить нельзя. |
==Литература== | ==Литература== | ||
* Peter Brucker. «Scheduling Algorithms» {{---}} «Springer», 2006 г. {{---}} 379 стр. {{---}} ISBN 978-3-540-69515-8 | * Peter Brucker. «Scheduling Algorithms» {{---}} «Springer», 2006 г. {{---}} 379 стр. {{---}} ISBN 978-3-540-69515-8 |
Версия 21:39, 21 июня 2012
Постановка задачи
Дан один станок на котором нужно выполнить
работ. Для каждой работы известны моменты времени, когда можно начинать её выполнять - и когда необходимо закончить её выполнение - . Время выполнения у всех работ одинаково и равно 1. Необходимо узнать, можно ли построить хорошее расписание (при котором все работы будут выполнены).Алгоритм
Идея алгоритма в том, чтобы из тех работ, которые уже можно выполнить, ставить в расписание ту, у которой наименьшее
. Если эта работа уже просрочена, значит хорошее расписание построить нельзя.Пусть
- множество ещё не включенных в расписание работ, к выполнению которых уже можно приступить. Изначально пустое. Отсортируем работы по порядку их появления.Алгоритм
Добавить в Пусть и минимально Расписание составить невозможно Удалить из
Сложность алгоритма
если в качестве использовать структуру, которая позволяет поиск элемента с минимальным за .Доказательство корректности алгоритма
Пусть с помощью нашего алгоритма составить хорошее расписание не удалось. Докажем, что в этом случае хорошего расписания не существует. Заметим, что расписание состоит из непрерывных блоков, между которыми есть пропуски - все поступившие работы выполнены, а новых работ ещё не появилось. Расписание может состоять из одного блока.
Рассмотрим первый блок, для которого не получилось составить расписание. Возьмем в нём первую работу, для которой не нашлось места. Пусть её индекс будет
. Попробуем вставить эту работу в расписание. До блока её вставить нельзя, так как больше или равно времени начала блока. А в блоке нет пропусков, поэтому нужно поменять её с какой-то -ой, которая уже стоит в этом блоке расписания. У всех таких работ меньше или равно , так как в алгоритме мы каждый раз брали работу с минимальным . Но -ую работу нельзя выполнить после -ой. Значит -ую работу выполнить нельзя.Литература
- Peter Brucker. «Scheduling Algorithms» — «Springer», 2006 г. — 379 стр. — ISBN 978-3-540-69515-8