1sumwT
Определение: |
Опоздание (англ. Tardiness, | )
Задача: |
Есть один станок и | работ. Для каждой работы заданы время выполнения дедлайн и стоимость выполнения этой работы . Необходимо минимизировать .
Псевдополиномиальное решение
Описание алгоритма
Будем делить имеющиеся у нас работы на множества
Алгоритм вычисляет оптимальное расписание для всех работ рекурсивно.
Псевдокод
Приведенный ниже алгоритм вычисляет оптимальную последовательность работ
для множества работ в начальный момент времени .function: if else find for to вычисляем значение if return
Доказательство корректности алгоритма
Лемма: |
Пусть - любая оптимальная последовательность работ для данных дедлайнов , - время завершения выполнения -ой работы.
Рассмотрим такие, что Тогда любая оптимальная последовательность работ для будет оптимальна и для |
Доказательство: |
|
Лемма: |
Пусть веса работ согласованы (из следует ). Тогда существует оптимальная последовательность , в которой работа предшествует работе , если и < , и все работы, выполненные до дедлайна, упорядочены в неубывающем порядке . |
Доказательство: |
Пусть |
Теорема: |
Пусть работы отстортированы в порядке неубывания дедлайнов, и веса согласованы. Обозначим за работу с наибольшим .
Тогда существует работа такая, что в оптимальном расписании все работы размещены до , а оставшиеся работы размещены после . |
Доказательство: |
Обозначим за |
Время работы
Пускай все времена выполнения работ различны. Тогда все множества работ, используемые в качестве аргументов рекурсивного вызова функции можно представить в виде
У нас максимум различных значений . Значит, нам нужно вызвать раз. Более того, для фиксированного все значения для < могут быть сосчитаны за .
Таким образом, мы получаем алгоритм, работающий за или , где .
См. также
Источники информации
- P. Brucker. Scheduling Algorithms (2006), 5th edition, стр. 95 - 98