1rjpjpsumwjcjиsumtj — различия между версиями
Romanosov (обсуждение | вклад) |
Romanosov (обсуждение | вклад) м (→Алгоритм) |
||
Строка 26: | Строка 26: | ||
==Алгоритм== | ==Алгоритм== | ||
+ | |||
+ | Отсортировать работы так, чтобы <tex>f_i</tex> удовлетворяла условиям неубывания; | ||
+ | for s, e <tex>\in</tex> T : s <tex>\leq</tex> e | ||
+ | <tex>F_0</tex>(s, e) = 0; | ||
+ | for k = 1..n | ||
+ | for s, e <tex>\in</tex> T : s <tex>\leq</tex> e | ||
+ | if <tex>r_k</tex> <tex>\notin</tex> [s - p, e) | ||
+ | <tex>F_k</tex>(s,e) = <tex>F_{k-1}</tex>(s,e) | ||
+ | else | ||
+ | <tex>F'_k</tex>(s,e) = <tex>F'</tex>(s,e), где | ||
+ | <tex>F'_k</tex>(s,e) = min{<tex>F_{k-1}</tex>(s,t_k) + <tex>F_{k-1}</tex>(t_k + p, e) + <tex>f_k</tex>(t_k + p)| <tex>t_k</tex> <tex>\in</tex> T; max{s, <tex>r_k</tex>} <tex>\leq</tex> <tex>t_k</tex> <tex>\leq</tex> e - p}; | ||
+ | return <tex>F_n($$\min_{i=1}^{n}r_i$$, max_{t \in T}t + p)</tex> | ||
==Время работы== | ==Время работы== |
Версия 22:44, 6 июня 2016
Задача: |
Дано n работ и 1 станок. Для каждой работы известны время появления r_i, вес w_i и дедлайн d_i. Время выполнения всех работ p_i равно p. Требуется выполнить все работы так, чтобы значение sum(w_iC_i), где C_i — время окончания работы, было минимальным. |
Задача: |
Дано n работ и 1 станок. Для каждой работы известны время появления r_i, вес w_i. Время выполнения всех работ p_i равно p. Требуется выполнить все работы так, чтобы значение sum(T_i) — суммарной медлительности работы(T_i = max(C_i - d_i), 0) — было минимальным. |
Содержание
Предисловие
Аналогично задаче , данные задачи решаются при помощи динамического программирования.
Вместо критериев оптимизации
и возьмём более общую для них функцию вида , где функции обладают следующими свойствами:- не убывает для всех ;
- не убывает для всех при .
Функции
и удовлетворяют данным условиям, если отсортировать работы так, что и .Алгоритм
Отсортировать работы так, чтобыудовлетворяла условиям неубывания; for s, e T : s e (s, e) = 0; for k = 1..n for s, e T : s e if [s - p, e) (s,e) = (s,e) else (s,e) = (s,e), где (s,e) = min{ (s,t_k) + (t_k + p, e) + (t_k + p)| T; max{s, } e - p}; return