147
правок
Изменения
→Алгоритм Голдберга-Таряна
=Алгоритм Голдберга-Таряна=
'''Алгоритм Голдберга-Тарьяна''' (англ ''Goldberg-Tarjan'') - алгоритм, решающий задачу нахождения максимального потока в транспортной сети за <tex>O(VE \log(VE))</tex>. Можно считать модификацией Алгоритма Диница.
==Идея==
Вспомним [[Схема алгоритма Диница|Алгоритм Диница]]. Пусть есть сеть <tex>G^0_f </tex> {{---}} некоторый ациклический граф, S, T {{---}} исток и сток соответственно. Схема Алгоритма Диница :
==Поиск пути==
Пусть U - корень дерева, в котором лежит S.
* Заметим, что если S, T лежат в одном дереве, то путь ищется легко. Это путь по дереву до корня. Предположим, что S, T лежат в разных деревьях. Просмотрим все ненасыщенные исходящие ребра. Будем рассматривать их также, как и в Алгоритме Диница, с глобальным итератором. Т.е начинать просмотр будем с последнего подошедшего ребра. Если ребро не подошло - больше его не рассматриваем.
* Если S, T лежат в разных деревьях. Просмотрим все ненасыщенные исходящие ребра. Будем рассматривать их также, как и в Алгоритме Диница, с глобальным итератором. Т.е начинать просмотр будем с последнего подошедшего ребра. Если ребро не подошло - больше его не рассматриваем. Пусть просматриваем какое-то ненасыщенное ребро, ведущее в некоторую вершину V. :# Подвесим корень U через это ребро к вершине V (Операция 3). #В U записываем число, равное остаточной пропускной способности ребра.
* Будем повторять, пока S и T не окажутся в одном дереве.
==Улучшение пути==
==Время работы==
Linking-Cutting Tree выполняет все вышеописанные запросы за <tex>O(\log(N))</tex>, оценим время работы алгоритма. Очевидно, что просмотров ребер суммарно <tex>O(\log(E))</tex>, как и в алгоритме Диница. Переход к следующему ребру происходит в следующих случаях:# просматриваемое ребро насыщено# дерево разрезается по нулевому ребру# ребро не лежит в сети кратчайших путей На каждый просмотр тратится не <tex>O(1)</tex> а <tex>O(\log(V))</tex>, потому что перед тем, как посмотреть на следующее ребро делается запрос. Значит время работы этой части {{---}} <tex>O(E \log(V))</tex>.