1p1sumu
| Задача: | 
| Дан один станок и работ, для которых заданы их дедлайны , а все времена выполнения на этом станке . Нужно успеть выполнить как можно больше работ. | 
Алгоритм
Чтобы получить оптимальное расписание, будем строить максимальное множество тех работ, которые успеют выполниться. Само расписание тогда будет состоять из всех работ из , упорядоченных по неубыванию дедлайнов. Будем добавлять в работы в порядке неубывания значений , если успеваем их выполнить.
function (: int[]): int[] 
  
  
  for  to  do
     
  Сортиуем d подсчетом
  for  to  do
    if 
      
       += 
return 
  
Cортировку работ по неубыванию дедлайнов осуществляем с помощью сортировки подсчетом за , а значит и весь алгоритм будет работать за . Во время сортировки стоит учитывать, что дедлайны могут значительно превосходить количество задач. В таком случае необходимо предварительно пересчитать дедлайны по формуле (в оптимальном расписании мы не выполняем работы позже времени ).
В результате выполнения данного алгоритма будет получено корректное расписание, в котором каждая работа встречается не более одного раза. Оптимальность полученного расписания доказывается аналогично .
См. также
Источники информации
- Peter Brucker. «Scheduling Algorithms» — «Springer», 2006 г. — 86 стр. — ISBN 978-3-540-69515-8
