Алгоритм отмены
Версия от 22:58, 25 декабря 2016; 78.37.177.81 (обсуждение)
Содержание
Алгоритм отмены цикла минимального среднего веса
Приведенный алгоритм принадлежит к классу сильно полиномиальных алгоритмов.
Определение: |
Сильно полиномиальными в контексте данной задачи называются алгоритмы, чья сложность полиномиально зависит от | — числа вершин и — числа ребер графа.
Описание алгоритма
Рассмотрим некоторый цикл
. Обозначим его стоимость за , а его длину (число ребер, входящих в цикл) за .
Определение: |
Средним весом цикла называется отношение его стоимости к его длине |
Сам алгоритм
Рассмотрим некоторый поток
. Находим цикл , обладающий наименьшим средним весом. Если , то — поток минимальной стоимости и алгоритм завершается. Иначе, отменим цикл : , где — остаточная пропускная способность цикла . Вернемся к началу алгоритма.Время работы алгоритма
, при этом времени тратится на поиск цикла минимального среднего веса.
Алгоритм поиска цикла минимального среднего веса
наивный способ
Устроим двоичный поиск. установим нижнюю и верхнюю границы
и , вычислим середину и отнимем величину от всех ребер. Если теперь в нашем графе есть отрицательный цикл, значит существует цикл с меньшим средним весом, чем . Тогда сдвигаем правую границу на , иначе — левую. Такой алгоритм будет работать за , где — точность выбора величины среднего веса цикла.способ убрать из оценки
Добавим к нашему графу вершину
d[i][u] // длина минимального пути от s до u ровно из i ребер
Тогда длина оптимального цикла
минимального среднего веса вычисляется как .Почему это так? Грубо говоря, достаточно доказать для
, так как для других можно просто отнять его величину от всех ребер и получить рассматриваемый случай.--- как же найти сам цикл Запомним, при каких
и достигается этот минимум, и, используя , по указателям предков поднимаемся. Как только мы зациклимся — мы нашли цикл минимального среднего веса.Этот алогоритм работает за
.