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