E141. 题目 Джонсона с одним станком

e-maxx algorithm original: C/C++ #algorithm #emaxx #scheduling #sort
题目文本会按所选界面语言从俄语翻译;代码保持不变。

Источник: e-maxx.ru/algo, страница PDF 469.

Это 题目 составления оптимального расписания обработки

деталей на единственном станке, если

-ая

деталь обрабатывается на нём за время

, а за

секунд ожидания до обработки этой детали платится штраф

. Таким образом, 题目 заключается в поиске такого переупорядочения деталей, что следующая величина

(размер штрафа) минимальна. Если мы обозначим через

перестановку деталей (

— номер первой

обрабатываемой детали,

— второй, и т.д.), то размер штрафа

равен: Иногда эта 题目 называется задачей однопроцессорного обслуживания множества заявок.

解法 задачи в некоторых частных случаях

Первый частный случай: линейные функции штрафа

Научимся решать эту задачу в случае, когда все

линейны, т.е. имеют вид:

где

— неотрицательные числа. Заметим, что в этих линейных функциях свободный член равен нулю, т.к. в противном случае к ответу сразу можно прибавить этот свободный член, и решать задачу с нулевым свободным членом.

Зафиксируем некоторое расписание — перестановку

. Зафиксируем какой-то номер

, и

пусть перестановка

равна перестановке

, в которой обменяли

-ый и

-ый elementы. Посмотрим, на сколько

при этом изменился штраф:

легко понять, что изменения произошли только с

-ым и

-ым слагаемыми:

Понятно, что если расписание

является оптимальным, то любое его изменение приводит к увеличению штрафа (или сохранению прежнего значения), поэтому для оптимального плана можно записать 题意: Преобразуя, получаем: Таким образом, оптимальное расписание можно получить, просто отсортировав все детали

по отношению

к

в обратном порядке. Следует отметить, что мы получили этот 算法 так называемым перестановочным приёмом: мы попробовали обменять местами два соседних elementа расписания, вычислили, насколько при этом изменился штраф, и отсюда вывели 算法 поиска оптимального расписания.

Второй частный случай: экспоненциальные функции штрафа

Пусть теперь функции штрафа имеют вид:

где все числа

неотрицательны, константа

положительна. Тогда, применяя аналогичным образом здесь перестановочный приём, легко получить, что детали надо сортировать в порядке убывания величин:

Третий частный случай: одинаковые монотонные функции штрафа

В этом случае считается, что все

совпадают с некоторой функцией

, которая является возрастающей. Понятно, что в этом случае оптимально располагать детали в порядке увеличения времени обработки .

Теорема Лившица-Кладова

Теорема Лившица-Кладова устанавливает, что перестановочный приём применим только для вышеописанных трёх частных случаев, и только них, т.е.:

● Линейный случай:

, где

— неотрицательные константы,

● Экспоненциальный случай:

, где

и

— положительные константы,

● Тождественный случай:

, где

— возрастающая функция. Эта теорема доказана в предположении, что функции штрафа являются достаточно гладкими (существуют третьи производные). Во всех трёх случаях применим перестановочный приём, благодаря которому искомое оптимальное расписание

может быть найдено простой сортировкой, следовательно, за время

.

C# 解法

自动草稿,提交前请检查
// C# draft for: Задача Джонсона с одним станком
// Original e-maxx article has no compact code listing in the extracted PDF text.

C++ 解法

匹配/原始
// C++ source for: Задача Джонсона с одним станком
// Compact code block was not extracted from this article.

Java 解法

自动草稿,提交前请检查
// Java draft for: Задача Джонсона с одним станком
// Original e-maxx article has no compact code listing in the extracted PDF text.

Материал разбит как 算法ическая 题目: изучить постановку, понять асимптотику и реализовать 算法 на выбранном языке.

Vacancies for this task

活跃职位 with overlapping task tags are 已显示.

所有职位
目前还没有活跃职位。