Изменения

Перейти к: навигация, поиск
Алгоритм
* '''Шаг 2'''. Найдем цикл <tex>C</tex>, обладающий наименьшим средним весом. Если <tex>\mu (C) \geqslant 0</tex>, то <tex>f</tex> {{---}} поток минимальной стоимости и алгоритм завершается.
* '''Шаг 3'''. Отменим цикл <tex>C</tex>, пустив по нему максимально возможный поток: <tex>f = f + c_{f}(C)\cdot f_{C}</tex>. Перейдем к '''шагу 1'''.
 
===Сложность===
<tex>O(VE\cdot VE^{2}\log{V})</tex>, при этом
<tex>O(VE)</tex> времени тратится на поиск цикла минимального среднего веса.
===Корректность===
{{Лемма
|id=lemma1
|statement=Если <tex>f</tex> {{---}} поток минимальной стоимости, то <tex>\exists \varphi</tex> такое, что <tex>\forall uv: \; c_{f}(uv) > 0 \qquad p_{\varphi}(uv) \geqslant 0</tex>.
|proof=
{{Лемма
|id=lemma2
|statement=Если стоимости целочисленны и поток <tex>f</tex> {{---}} <tex>\varepsilon</tex>-оптимальный, где <tex>\varepsilon < \dfrac{1}{n}</tex>, то <tex>f</tex> {{---}} поток минимальной стоимости.
|proof=
Обозначим за <tex>\mu(f)</tex> минимальную величину среди средних весов циклов для потока <tex>f</tex>, а за <tex>\varepsilon(f)</tex> минимальное <tex>\varepsilon</tex> такое, что поток <tex>f</tex> {{---}} <tex>\varepsilon</tex>-оптимальный.
{{Лемма
|id=lemma3
|statement=Если <tex>f</tex> {{---}} поток не минимальной стоимости, то <tex>\varepsilon(f)=-\mu(f)</tex>.
|proof=
{{Лемма
|id=lemma4
|statement=Отмена цикла минимального среднего веса не увеличивает <tex>\varepsilon(f)</tex>.
|proof=
}}
===Сложность===<tex>O(VE\cdot VE^{2}\log{V})</tex>, при этомЛемма<tex>O(VE)</tex> |about=доказательство оценки времени тратится на поиск цикла минимального среднего веса.работы алгоритма|statement====Доказательство====Пусть <tex>k=VE(\lceil \log V + 1 \rceil)</tex>. Разобьем работу алгоритма на группы по <tex>k</tex> последовательных итераций. Утверждается, что каждая группа фиксирует поток на независимом ребре <tex>uv</tex>, то есть итерации из другой группы не меняют величину <tex>f(uv)</tex>. |proof=Оценка следует непосредственно из этого утверждения. Чтобы доказать его, рассмотрим некоторую группу итераций. Пусть <tex>f</tex> {{---}} поток до первой итерации рассматриваемой группы, а <tex>f'</tex> {{---}} поток после последней итерации. Также пусть для простоты обозначений <tex>\varepsilon = \varepsilon(f)</tex>, <tex>\varepsilon'=\varepsilon(f')</tex>, при этом <tex>\varphi'</tex> {{---}} функция потенциалов такая, что <tex>f'</tex> удовлетворяет свойству <tex>\varepsilon'</tex>-оптимальности. Рассмотрим цикл <tex>C</tex>, отмененный после первой итерации группы. Выбор <tex>k</tex> дает нам <tex>\varepsilon' \leqslant \varepsilon \left(1-\dfrac{1}{V} \right)^{V(\log V + 1)} \leqslant \dfrac{\varepsilon}{2V}</tex>. Поскольку средний вес цикла <tex>C</tex> равен <tex>-\varepsilon</tex>, некоторое ребро <tex>uv</tex> цикла <tex>C</tex> должно иметь приведенную стоимость <tex>p_{\varphi'}(uv) \leqslant -\varepsilon \leqslant -2n\varepsilon'</tex>. Таким образом, поток на ребре <tex>uv</tex> не изменится при итерациях, происходящих после этой группы. Таким образом, каждая группа фиксирует поток на независимом ребре.}}
==Алгоритм поиска цикла минимального среднего веса==
276
правок

Навигация