Использование потенциалов Джонсона при поиске потока минимальной стоимости — различия между версиями
м (→Асимптотика) |
|||
Строка 40: | Строка 40: | ||
Время, затраченное на одну итерацию, определяется скоростью поиска кратчайшего пути. | Время, затраченное на одну итерацию, определяется скоростью поиска кратчайшего пути. | ||
− | Если для этой цели использовать [[Алгоритм Дейкстры|алгоритм Дейкстры]] с Фиббоначевыми кучами, то поиск мы осуществим за <tex>O(V log V + E)</tex>. | + | Если для этой цели использовать [[Алгоритм Дейкстры|алгоритм Дейкстры]] с Фиббоначевыми кучами, то поиск мы осуществим за <tex>O(V \log V + E)</tex>. |
Не стоит так же забывать, что для расчёта потенциалов мы один раз запустили Алгоритм Форда-Беллмана. | Не стоит так же забывать, что для расчёта потенциалов мы один раз запустили Алгоритм Форда-Беллмана. | ||
− | В результате получим время работы <tex>O((V log V + E) \cdot |f| + V E)</tex>. | + | В результате получим время работы <tex>O((V \log V + E) \cdot |f| + V E)</tex>. |
Это лучше, чем <tex>O((V E) \cdot |f|)</tex>, что получается при использовании [[Алгоритм Форда-Беллмана|алгоритма Форда-Беллмана]] для поиска кратчайшего пути на каждой итерации. | Это лучше, чем <tex>O((V E) \cdot |f|)</tex>, что получается при использовании [[Алгоритм Форда-Беллмана|алгоритма Форда-Беллмана]] для поиска кратчайшего пути на каждой итерации. | ||
− | В применении к | + | В применении к [[Сведение задачи о назначениях к задаче о потоке минимальной стоимости|задаче о назначениях]]: пусть у нас есть <tex>N</tex> назначений. Построим специальным образом граф. Искомый поток в нём имеет имеет мощность <tex>N</tex>. Количество вершин — <tex>O(N)</tex>, рёбер — <tex>O(N^2)</tex>. Итого получаем асимптотику <tex>O(N^2 \log N + 2N^3) = O(N^3)</tex>. |
== Литература == | == Литература == |
Версия 21:47, 1 марта 2012
Метод интересен прежде всего тем, что задачу о назначениях можно свести к задаче о поиске потока минимальной стоимости, и тогда эффективность решения задачи о назначениях будет определяться именно асимптотикой работы этого алгоритма.
Мотивация
Зачем нужно использовать потенциалы Джонсона?
Идея аналогична идее, использующейся в алгоритме Джонсона.
При поиске потока минимальной стоимости методом дополнения вдоль путей минимальной стоимости нам требуется находить минимальный по стоимости поток из истока в сток. Это реализуется с помощью алгоритмов поиска кратчайшего пути в графе. Поскольку стоимость некоторых рёбер может быть отрицательной, нам приходится использовать алгоритм Форда-Беллмана. Однако гораздо эффективней было бы применить алгоритм Дейкстры для этой же цели, так как у него гораздо лучше асимптотика. Для этого нам надо перевзвесить рёбра графа.
Определение: |
Пусть дана транспортная сеть | , где — множество вершин графа, а — множество рёбер. Введем в каждой вершине потенциал . Тогда остаточная стоимость ребра определяется как
Заметим, что сумма остаточных стоимостей ребер вдоль любого пути отличается от суммы стоимостей вдоль того же самого пути на разность между потенциалом первой и последней вершины.
Использование потенциалов Джонсона
Возьмём значения потенциалов в вершинах равными минимальному по цене расстоянию от стока до них или алгоритма Форда-Беллмана. Таким образом, нам его придётся запустить всего один раз, а не на каждом шаге алгоритма.
, если она недостижима. Так как — это длина какого-то пути до вершины , а — длина минимального пути, то , что от нас и требовалось. Значения потенциалов найдём с помощьюРеализация
Модифицируем псевдокод из статьи про поиск потока минимальной стоимости методом дополнения вдоль путей минимальной стоимости:
for{ } Запустим алгоритм Форда-Беллмана, в результате для каждой вершины: — расстояние , если за длину ребра принимается его стоимость. for { } while (существует путь в остаточной сети ) { Найти — кратчайший в смысле стоимости путь с помощью алгоритма Дейкстры дополнить поток вдоль }
Асимптотика
Пусть все пропускные способности целочисленны. Метод целиком работает за , где — время одной итерации.
Время, затраченное на одну итерацию, определяется скоростью поиска кратчайшего пути. Если для этой цели использовать алгоритм Дейкстры с Фиббоначевыми кучами, то поиск мы осуществим за .
Не стоит так же забывать, что для расчёта потенциалов мы один раз запустили Алгоритм Форда-Беллмана. В результате получим время работы
.Это лучше, чем алгоритма Форда-Беллмана для поиска кратчайшего пути на каждой итерации.
, что получается при использовании
В применении к задаче о назначениях: пусть у нас есть назначений. Построим специальным образом граф. Искомый поток в нём имеет имеет мощность . Количество вершин — , рёбер — . Итого получаем асимптотику .
Литература
- Andrew V. Goldberg An Efficient implementation of a scaling minimum-cost flow algorithm - Journal of Algorithms, 1997