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