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