QSumCi — различия между версиями
(→Постановка задачи) |
(→Алгоритм решения) |
||
Строка 7: | Строка 7: | ||
==Алгоритм решения== | ==Алгоритм решения== | ||
− | Пусть <tex> i_1, i_2, \cdots i_r </tex> последовательность работ, выполняемых на станке с номером <tex> j </tex>. Тогда вклад этих работ в целевую функцию будет равен <tex> p_{i1}\frac{r}{s_j} + p_{i2}\frac{r-1}{s_j}+ \cdots +p_{ir}\frac{1}{s_j} </tex>. Отсюда видно, что сумма оптимальна, когда последовательность <tex> p_{ij} </tex> не убывает. | + | Пусть <tex> i_1, i_2, \cdots i_r </tex> последовательность работ, выполняемых на станке с номером <tex> j </tex>. Тогда вклад этих работ в целевую функцию будет равен <tex> p_{i1}\frac{r}{s_j} + p_{i2}\frac{r-1}{s_j}+ \cdots +p_{ir}\frac{1}{s_j} </tex>. [[Задача_о_минимуме/максимуме_скалярного_произведения|Отсюда]] видно, что сумма оптимальна, когда последовательность <tex> p_{ij} </tex> не убывает. |
Теперь введем неубывающую последовательность <tex> t_1, t_2 ... t_n </tex>, которая состоит из <tex> n </tex> минимальных элементов из множества <tex> \{\frac{1}{s_1}, \frac{1}{s_2} \cdots \frac{1}{s_m}, \frac{2}{s_1}, \frac{2}{s_2} \cdots \frac{2}{s_m}, \frac{3}{s_1} \cdots \}</tex>. Тогда <tex> t_i</tex> показывает на каком станке и какой по счету с конца должна выполняться работа с номером <tex>i</tex> в отсортированном по длительности списке работ. Сопоставляя работы и <tex> t_i</tex> составляем расписание. | Теперь введем неубывающую последовательность <tex> t_1, t_2 ... t_n </tex>, которая состоит из <tex> n </tex> минимальных элементов из множества <tex> \{\frac{1}{s_1}, \frac{1}{s_2} \cdots \frac{1}{s_m}, \frac{2}{s_1}, \frac{2}{s_2} \cdots \frac{2}{s_m}, \frac{3}{s_1} \cdots \}</tex>. Тогда <tex> t_i</tex> показывает на каком станке и какой по счету с конца должна выполняться работа с номером <tex>i</tex> в отсортированном по длительности списке работ. Сопоставляя работы и <tex> t_i</tex> составляем расписание. | ||
Строка 14: | Строка 14: | ||
Приведенный алгоритм верен. | Приведенный алгоритм верен. | ||
|proof= | |proof= | ||
− | # Докажем правильность выбора мест работ. Станок, на котором выполняется работа, и номер работы на этом станке с конца | + | # Докажем правильность выбора мест работ. Станок, на котором выполняется работа, и номер работы на этом станке с конца определяют коэффициент перед длительностью выполнения <tex> p_i\frac{t}{s_j} </tex>, тут <tex> t</tex> {{---}} номер работы с конца, а <tex>j</tex> {{---}} номер станка. Именно с таким коэффициентом работа войдет в целевую функцию. Мы выбираем минимальные <tex>n</tex> коэффициентов, следовательно, взяв хотя бы один другой коэффициент, мы увеличим время работы. |
− | # Докажем, что работы надо сопоставлять в порядке не убывания. Предположим у нас есть коэффициенты <tex> t_i </tex> и <tex> t_j </tex>, такие что <tex> t_i \le t_j </tex> и работы <tex> p_k \ge p_l </tex>, и мы сопоставили <tex> t_i </tex> с <tex> p_l </tex>, а <tex>t_j</tex> с <tex>p_k</tex>. Тогда, если мы поменяем работы местами, то значение целевой функции станет меньше на <tex> p_k(t_j - t_i)+p_l(t_i-t_j) = (p_k - p_l)(t_j-t_i) \ge 0</tex>. Видно, что результат не ухудшится. | + | # Докажем, что работы надо сопоставлять в порядке не убывания. Предположим, у нас есть коэффициенты <tex> t_i </tex> и <tex> t_j </tex>, такие что <tex> t_i \le t_j </tex> и работы <tex> p_k \ge p_l </tex>, и мы сопоставили <tex> t_i </tex> с <tex> p_l </tex>, а <tex>t_j</tex> с <tex>p_k</tex>. Тогда, если мы поменяем работы местами, то значение целевой функции станет меньше на <tex> p_k(t_j - t_i)+p_l(t_i-t_j) = (p_k - p_l)(t_j-t_i) \ge 0</tex>. Видно, что результат не ухудшится. |
}} | }} | ||
Версия 22:58, 21 июня 2012
Постановка задачи
Есть несколько станков с разной скоростью выполнения работ и несколько работ с заданным временем выполнения.
Цель — составить такое расписание, чтобы суммарное время окончания всех работ было минимальным.
Алгоритм решения
Пусть Отсюда видно, что сумма оптимальна, когда последовательность не убывает. Теперь введем неубывающую последовательность , которая состоит из минимальных элементов из множества . Тогда показывает на каком станке и какой по счету с конца должна выполняться работа с номером в отсортированном по длительности списке работ. Сопоставляя работы и составляем расписание.
последовательность работ, выполняемых на станке с номером . Тогда вклад этих работ в целевую функцию будет равен .Теорема: |
Приведенный алгоритм верен. |
Доказательство: |
|
Время работы
Начальная сортировка работ занимается
времени. Затем происходит выбор минимальных коэффициентов, посредством приоритетной очереди время работы составит . Итого суммарное время работы .Литература
- Peter Brucker. «Scheduling Algorithms» — «Springer», 2006 г. — 133 стр. — ISBN 978-3-540-69515-8