577
правок
Изменения
Нет описания правки
{{Определение|definition = Определим <tex>half(L)</tex> как множество первых половин цепочек языка <tex>L</tex>, то есть множество <tex>\{ w \mid </tex dpi > существует <tex>x</tex>, для которой <tex>wx \in L</tex>, причем <tex>|w| = "200"|x| \}</tex>. }}Например, если <tex> O L = \mid p_{i\varepsilon,j0010, 011, 010110 \} </tex>, то <tex>half(L) = 1 \mid { \varepsilon, 00, 010 \sum T_{i} </tex>. Заметим, что цепочки нечетной длины не влияют на <tex>half(L)</tex>.{{ЗадачаОпределение|definition=Дано Определим <tex>mcycle(L)</tex> одинаковых станков, которые работают параллельно, и как множество <tex>\{ w \mid </tex> цепочку <tex>nw</tex> работ, которые необходимо выполнить можно представить в произвольном порядке на всех станках. Любая работа на любом станке выполняется единицу времени. Для каждой работы есть время окончания виде <tex>d_iw = xy</tex> {{---, где <tex>yx \in L \}} время, до которого она должна быть выполнена. Необходимо минимизировать суммарную [[Классификация_задач#Критерий оптимизации|медлительность]]</tex>.}} Например, если <tex>L == Описание алгоритма ===== Идея ===Будем полагать\{ 01, что работы заданы в порядке неубывания их дедлайнов011 \}</tex>, то есть <tex>d_1 cycle(L) = \leqslant d_2 { 01, 10, 011, 110, 101 \leqslant \ldots \leqslant d_n}</tex>. {{ЛеммаУтверждение|id = st3|statement=Пусть есть работы <tex>1 \ldots nL</tex> с дедлайнами {{---}} регулярный язык. Тогда язык <tex>d_1 \leqslant d_2 \leqslant \ldots \leqslant d_nhalf(L)</tex>также регулярен. Тогда существует оптимальное расписание, в котором времена завершения работ идут в том же порядке|proof =Так как <tex>L</tex> {{---}} регулярный язык, то есть существует допускающий его ДКА и порождающее его регулярное выражение. Оба эти факта могут быть использованы для доказательства утверждения. Мы выберем первый.<br>Пусть <tex>C_1 M = \leqslant C_2 langle \leqslant Sigma , Q , q_0 , F , \ldots delta \leqslant C_nrangle </tex> {{---}} ДКА, допускающий язык <tex>L</tex>.|proof=Рассмотрим две работы строку <tex>ix</tex> и . Для того, чтобы проверить, что <tex>jx \in half(L)</tex> из какого-либо оптимального расписания такие, нам надо убедиться, что существует строка <tex>C_i > C_jy</tex> такой же длины, что и <tex>d_i x</tex>, которая, будучи сконкатенированной с < d_jtex>x</tex>, даст строку из <tex>L</tex>. Поменяем эти работы в расписании местами, то есть если на вход автомату подать <tex>C'_i = C_jxy</tex>, то в конце обработки мы окажемся в терминальном состоянии. Предположим, что автомат, закончив обработку <tex>x</tex> и , находится в состоянии <tex>C'_j = C_iq_i</tex>. Если они обе успевали выполниться вовремя, то это свойство сохранитсяесть <tex>\delta(q_0, так как x) = q_i</tex>d_i . Мы должны проверить, что существует строка < d_jtex>y, |y| = |x|,</tex>, значит по-прежнему которая ведет из состояния <tex>T_i = 0q_i</tex> и до какого-нибудь терминального состояния <tex>T_j = 0M</tex>, то есть значение целевой функции мы не ухудшили и расписание осталось оптимальным<tex>\delta(q_i, y) \in F</tex>. Если обе работы не успевали выполниться вовремяПредположим, то когда что мы поменяем их местами ничего не изменитсяпрошли <tex>n</tex> вершин автомата, то есть значение целевой функции останется прежним<tex>|x| = n</tex>. Обозначим за <tex>S_n</tex> множество всех состояний, так как мы не меняли значения времен окончаний, а только поменяли их местамис которых можно попасть в терминальные за <tex>n</tex> шагов. Тогда <tex>q_i \in S_n \Leftrightarrow x \in half(L)</tex>. Если работа мы сможем отслеживать <tex>jS_n</tex> успевала выполниться, а и <tex>iq_i</tex> {{---}} нет, то мы снова не ухудшим значение целевой функции. Покажем это. До тогосможем определять, как мы поменяли работы местамиверно ли, было что <tex>T_i + T_j = C_i - d_ix \in half(L)</tex>. Заметим, так как что <tex>T_j = 0S_0 \equiv F</tex>. После того, как Очевидно мы поменяли работы местами, можем построить <tex>T_i S_{n+ T_j = C'_i - d_i + C'_j - d_j = C_j - d_i + C_i - d_j = C_i - d_i + (C_j - d_j)1}</tex> зная <tex>S_n</tex>. Но так как работа и <tex>j\delta</tex> успевает выполниться до дедлайна: <tex>S_{n+1} = \{ q_j \mid \delta(q_j, q_k) \in Q, то q_k \in S_n \}</tex>C_j {{- d_j \leqslant 0--}} множество состояний, из которых есть переход в какое-либо состояние из <tex>S_n</tex>(по единственному символу).
}}
{{Утверждение|id === Псевдокод ==st4|statement =Определим ''вектор частот'' Пусть <tex>h(t)L</tex> {{---}} количество работ во временном интервале <tex>t</tex>регулярный язык. Работы отсортированы в порядке Тогда язык <tex>d_1 \leqslant d_2 \leqslant \ldots \leqslant d_ncycle(L)</tex>также регулярен.|proof =
}}