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
 - Лазарев А.А., Мусатова Е.Г., Кварацхелия А.Г., Гафаров Е.Р. Пособие по теории расписаний.