1ripi1sumwc
НЕТ ВОЙНЕ |
24 февраля 2022 года российское руководство во главе с Владимиром Путиным развязало агрессивную войну против Украины. В глазах всего мира это военное преступление совершено от лица всей страны, всех россиян. Будучи гражданами Российской Федерации, мы против своей воли оказались ответственными за нарушение международного права, военное вторжение и массовую гибель людей. Чудовищность совершенного преступления не оставляет возможности промолчать или ограничиться пассивным несогласием. Мы убеждены в абсолютной ценности человеческой жизни, в незыблемости прав и свобод личности. Режим Путина — угроза этим ценностям. Наша задача — обьединить все силы для сопротивления ей. Эту войну начали не россияне, а обезумевший диктатор. И наш гражданский долг — сделать всё, чтобы её остановить. Антивоенный комитет России |
Распространяйте правду о текущих событиях, оберегайте от пропаганды своих друзей и близких. Изменение общественного восприятия войны - ключ к её завершению. |
meduza.io, Популярная политика, Новая газета, zona.media, Майкл Наки. |
Задача: |
Дано | работ и один станок. Для каждой работы известно её время появления и вес . Время выполнения всех работ равно . Требуется выполнить все работы, чтобы значение было минимальным, где — время окончания работы.
Содержание
Более простые варианты исходной задачи
Перед решением основной задачи рассмотрим более простые.
Вариант 1
Этот случай простейший. Ответом будет
, так как мы раз сложим время окончания выполнения одной работы. Воспользовавшись формулой суммы первых членов арифметической прогрессии алгоритм будет работает за , но если нужно вывести и само расписание, время работы будет .Вариант 2
Для верного выполнения просто выставим работы по порядку невозрастания весов, тогда ответом будет теореме о минимуме/максимуме скалярного произведения, так как мы сопоставляем две последовательности, подходящие под условия теоремы.
, так как мы раз сложим время окончания выполнения одной работы (которое в нашем случае ) домноженное на вес этой работы. Данный алгоритм корректен поТак как сортировка весов занимает время, то асимптотика времени работы алгорита равна .
Основная задача
Описание алгоритма
Пусть
Для каждого очередного значения , которое изменяется от до времени окончания последней работы, будем:
- Выбирать работу из множества невыполненных работ, у которой , а значение максимально.
- Если мы смогли найти работу , то выполняем её в момент времени и удаляем из множества невыполненных работ.
- Увеличиваем на один.
Доказательство корректности алгоритма
Теорема: |
Расписание, построенное данным алгоритмом, является корректным и оптимальным. |
Доказательство: |
Доказательство будем вести от противного. Первая скобка отрицательная: |
Псевдокод
Реализация 1
while if and and if
Множество очередь с приоритетами. Значит общее время работы алгоритма
станет пустым не позже, чем через шагов цикла. Определить максимум в множестве можно за время , используя , например,Реализация 2
- очередь, в которой работы изначально располагаются в отсортированном по порядке, — обычная
- приоритетная очередь по максимуму. —
while and if if while if break else
Данная реализация имеет идею, аналогичную предыдущей: сначала обрабатывать работу с максимальным весом среди всех доступных. В начале работы сортируются по
, из очереди достаётся каждая работа, причём ровно один раз, аналогично для очереди , поэтому итоговая асимптотика времени работы алгоритма составляет .См. также
Источники информации
- P. Brucker. Scheduling Algorithms (2006), 5th edition, стр. 19-20
- P. Brucker. Scheduling Algorithms (2006), 5th edition, стр. 38-39
- P. Brucker. Scheduling Algorithms (2006), 5th edition, стр. 84-85
- Лазарев А.А., Мусатова Е.Г., Кварацхелия А.Г., Гафаров Е.Р. Пособие по теории расписаний.