Алгоритм отмены — различия между версиями
Penguinni (обсуждение | вклад) (Новая страница: «==Алгоритм отмены цикла минимального среднего веса== Приведенный алгоритм принадлежит к...») |
|||
Строка 13: | Строка 13: | ||
====Сам алгоритм==== | ====Сам алгоритм==== | ||
Рассмотрим некоторый поток <tex>f</tex>. Находим цикл <tex>C</tex>, обладающий наименьшим средним весом. Если <tex>\mu (C) \geq 0</tex>, то <tex>f</tex> {{---}} поток минимальной стоимости и алгоритм завершается. | Рассмотрим некоторый поток <tex>f</tex>. Находим цикл <tex>C</tex>, обладающий наименьшим средним весом. Если <tex>\mu (C) \geq 0</tex>, то <tex>f</tex> {{---}} поток минимальной стоимости и алгоритм завершается. | ||
− | Иначе, отменим цикл <tex>C</tex>: <tex>f := f + c_{f}(C)\cdot f_{C}, где <tex>c_{f}(C) {{---}} остаточная пропускная способность цикла <tex>C</tex>. | + | Иначе, отменим цикл <tex>C</tex>: <tex>f := f + c_{f}(C)\cdot f_{C}</tex>, где <tex>c_{f}(C)</tex> {{---}} остаточная пропускная способность цикла <tex>C</tex>. |
Вернемся к началу алгоритма. | Вернемся к началу алгоритма. | ||
====Время работы алгоритма==== | ====Время работы алгоритма==== | ||
− | <tex>O(VE\cdot VE^{2}\log{V})</tex> | + | <tex>O(VE\cdot VE^{2}\log{V})</tex>, при этом |
+ | <tex>O(VE)</tex> времени тратится на поиск цикла минимального среднего веса. | ||
===Алгоритм поиска цикла минимального среднего веса=== | ===Алгоритм поиска цикла минимального среднего веса=== | ||
+ | ====наивный способ==== | ||
+ | Устроим двоичный поиск. | ||
+ | установим нижнюю и верхнюю границы <tex>l</tex> и <tex>r</tex>, вычислим середину <tex>m</tex> и отнимем величину <tex>m</tex> от всех ребер. Если теперь в нашем графе есть отрицательный цикл, значит существует цикл с меньшим средним весом, чем <tex>m</tex>. Тогда сдвигаем правую границу на <tex>m</tex>, иначе {{---}} левую. | ||
+ | Такой алгоритм будет работать за <tex>O(\texttt{log} \frac{1}{\varepsilon} \cdot EV)</tex>, где <tex>\varepsilon</tex> {{---}} точность выбора величины среднего веса цикла. | ||
+ | ====способ убрать <tex>\texttt{log} \frac{1}{\varepsilon}</tex> из оценки==== |
Версия 22:20, 25 декабря 2016
Содержание
Алгоритм отмены цикла минимального среднего веса
Приведенный алгоритм принадлежит к классу сильно полиномиальных алгоритмов.
Определение: |
Сильно полиномиальными в контексте данной задачи называются алгоритмы, чья сложность полиномиально зависит от | — числа вершин и — числа ребер графа.
Описание алгоритма
Рассмотрим некоторый цикл
. Обозначим его стоимость за , а его длину (число ребер, входящих в цикл) за .
Определение: |
Средним весом цикла называется отношение его стоимости к его длине |
Сам алгоритм
Рассмотрим некоторый поток
. Находим цикл , обладающий наименьшим средним весом. Если , то — поток минимальной стоимости и алгоритм завершается. Иначе, отменим цикл : , где — остаточная пропускная способность цикла . Вернемся к началу алгоритма.Время работы алгоритма
, при этом времени тратится на поиск цикла минимального среднего веса.
Алгоритм поиска цикла минимального среднего веса
наивный способ
Устроим двоичный поиск. установим нижнюю и верхнюю границы
и , вычислим середину и отнимем величину от всех ребер. Если теперь в нашем графе есть отрицательный цикл, значит существует цикл с меньшим средним весом, чем . Тогда сдвигаем правую границу на , иначе — левую. Такой алгоритм будет работать за , где — точность выбора величины среднего веса цикла.