577
правок
Изменения
→Асимптотика
=== Асимптотика ===
Покажем, что данный алгоритм может быть реализован за время <tex>O(nm)</tex>.<br>
Для начала рассмотрим следующий вопрос: пусть <tex>U</tex> {{---}} множество работ, для которого существует расписание, в котором отсутствуют опаздывающие работы, пусть <tex>i</tex> {{---}} работа, не принадлежащая <tex>U</tex>, для которой выполняется неравенство <tex>d_i d_j \leqslant d_jd_i</tex>для любой <tex>j \in U</tex>. Можно ли построить расписание для множества <tex>V = U \cup \{i\}</tex>, в котором так же будут отсутствовать опаздывающие работы.<br>
Введем несколько обозначений. Вектора <tex>h</tex>, соответствующие множествам <tex>U</tex> и <tex>V</tex> обозначим как <tex>h^U</tex> и <tex>h^V</tex> соответственно. <tex>x(d_i)</tex> {{---}} количество временных интервалов <tex>t</tex> со свойствами
*<tex>d_i - m + 1 \leqslant t \leqslant d_i</tex>,
*<tex>h^U(t) < m</tex>.
Будем говорить, что работы могут множество работ может быть выполнены выполнено ''вовремя'', если для них существует расписание, в котором эти все работы из этого множества успевают выполниться без опозданий.
{{Лемма
|statement=
Пусть даны работы <tex>1, 2 \ldots i</tex> с дедлайнами <tex>d_1 \leqslant d_2 \leqslant \ldots \leqslant d_i</tex>, <tex>U = \{1, 2, \ldots i - 1\}</tex> и <tex>V = U \cup \{i\}</tex>. Тогда для всех работ <tex>j = d_i - m + 1 \ldots d_i</tex>, для которых <tex>h^U(j) < m</tex>, будет верно, что <tex>h^V(j) = h^U(j) + 1</tex>.
|proof=
Рассмотрим вектора <tex>h^U</tex> и <tex>h^V</tex> после <tex>i - 1</tex> и <tex>i</tex> итераций алгоритма. Заметим, что значения вектора <tex>h</tex>, не превосходящие <tex>m</tex>, то есть <tex>h(j) < m</tex>, никогда не уменьшаются. Следовательно, если <tex>d_i - m + 1 \leqslant j \leqslant d_i</tex> и <tex>h^U(j) < m</tex>, то <tex>h^V(j) \geqslant h^U(j) + 1</tex>. Чтобы показать, что ситуация, когда при тех же условиях <tex>h^V(j) \geqslant h^U(j) + 2</tex>, невозможна, рассмотрим расписание, построенное алгоритмом.<br>Если <tex>h^V(j) \geqslant h^U(j) + 2</tex>, то это значит, что в течение <tex>i</tex> итерации во временной интервал <tex>j</tex> была добавлена работа <tex>i</tex> и еще как минимум одна работа, пусть работа <tex>k</tex>, была перемещена из временного интервала <tex>j + 1</tex> в <tex>j</tex>. Это возможно только если работа <tex>k</tex> ни на одной машине не была назначена до временного интервала <tex>j</tex>. Следовательно, работа <tex>k</tex> выполняется во временной интервал <tex>j</tex> и некоторые временные интервалы <tex>v > j + 1</tex>, откуда следует, что <tex>j < d_k - m + 1 \leqslant d_i - m + 1</tex>, что приводит нас к противоречию.}}{{Теорема|statement=Пусть <tex>U</tex> {{---}} множество работ, которое может быть выполнено вовремя, пусть <tex>i</tex> {{---}} работа, не принадлежащая <tex>U</tex>, для которой выполняется неравенство <tex>d_j \leqslant d_i</tex> для любой <tex>j \in U</tex>. Тогда множество работ <tex>V = U \cup \{i\}</tex> может быть выполнено вовремя тогда и только тогда, когда <tex>x(d_i) + \sum\limits_{t = 1}^{d_i - m}(m - h^U(t)) \geqslant m</tex> (1).|proof= Неравенство (1) равносильно <tex>(d_i - m)m \geqslant \sum\limits_{t = 1}^{d_i - m}h^U(t) + m - x(d_i)</tex>.
}}