Использование потенциалов Джонсона при поиске потока минимальной стоимости — различия между версиями
Строка 1: | Строка 1: | ||
+ | Метод интересен прежде всего тем, что [[Сведение задачи о назначениях к задаче о потоке минимальной стоимости|задачу о назначениях]] можно свести к задаче о поиске потока минимальной стоимости, и тогда эффективность решения задачи о назначениях будет определяться именно асимптотикой работы этого алгоритма. | ||
+ | |||
== Мотивация == | == Мотивация == | ||
+ | |||
+ | Зачем нужно использовать потенциалы Джонсона? | ||
Идея аналогична идее, использующейся в [[Алгоритм Джонсона|алгоритме Джонсона]]. | Идея аналогична идее, использующейся в [[Алгоритм Джонсона|алгоритме Джонсона]]. | ||
− | При [[Поиск потока минимальной стоимости методом дополнения вдоль путей минимальной стоимости|поиске потока минимальной стоимости методом дополнения вдоль путей минимальной стоимости]] нам требуется находить минимальный по стоимости поток из истока в сток. Поскольку стоимость некоторых рёбер может быть отрицательной, нам приходится использовать [[Алгоритм Форда-Беллмана|алгоритм Форда-Беллмана]] | + | При [[Поиск потока минимальной стоимости методом дополнения вдоль путей минимальной стоимости|поиске потока минимальной стоимости методом дополнения вдоль путей минимальной стоимости]] нам требуется находить минимальный по стоимости поток из истока в сток. Это реализуется с помощью алгоритмов поиска кратчайшего пути в графе. Поскольку стоимость некоторых рёбер может быть отрицательной, нам приходится использовать [[Алгоритм Форда-Беллмана|алгоритм Форда-Беллмана]]. Однако гораздо эффективней было бы применить [[Алгоритм Дейкстры|алгоритм Дейкстры]] для этой же цели, так как у него гораздо лучше асимптотика. Для этого нам надо перевзвесить рёбра графа. |
{{Определение | {{Определение | ||
− | |definition=Пусть дана транспортная сеть <tex>\,G(V,E)</tex>. Введем в каждой вершине потенциал <tex>\,p_i</tex>. Тогда остаточная стоимость ребра <tex>\,c_{p_{ij}}</tex> определяется как | + | |definition=Пусть дана транспортная сеть <tex>\,G(V,E)</tex>, где <tex>V</tex> — множество вершин графа, а <tex>E</tex> — множество рёбер. Введем в каждой вершине потенциал <tex>\,p_i</tex>. Тогда остаточная стоимость ребра <tex>\,c_{p_{ij}}</tex> определяется как |
<tex>\,c_{p_{ij}} = c_{ij} + p_i - p_j </tex> | <tex>\,c_{p_{ij}} = c_{ij} + p_i - p_j </tex> | ||
}} | }} | ||
Строка 33: | Строка 37: | ||
==Асимптотика== | ==Асимптотика== | ||
Пусть все пропускные способности целочисленны. | Пусть все пропускные способности целочисленны. | ||
− | + | [[Поиск потока минимальной стоимости методом дополнения вдоль путей минимальной стоимости|Метод целиком]] работает за <tex>O(F(V, E) \cdot |f|)</tex>, где <tex>F(V, E)</tex> — время одной итерации. | |
− | [[Поиск потока минимальной стоимости методом дополнения вдоль путей минимальной стоимости| | + | |
− | Если использовать [[Алгоритм Дейкстры|алгоритм Дейкстры]] с Фиббоначевыми кучами, то <tex> | + | Время, затраченное на одну итерацию, определяется скоростью поиска кратчайшего пути. |
+ | Если для этой цели использовать [[Алгоритм Дейкстры|алгоритм Дейкстры]] с Фиббоначевыми кучами, то поиск мы осуществим за <tex>O(V log 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>, что получается при использовании [[Алгоритм Форда-Беллмана|алгоритма Форда-Беллмана]] для поиска кратчайшего пути на каждой итерации. |
== Литература == | == Литература == |
Версия 12:01, 28 февраля 2012
Метод интересен прежде всего тем, что задачу о назначениях можно свести к задаче о поиске потока минимальной стоимости, и тогда эффективность решения задачи о назначениях будет определяться именно асимптотикой работы этого алгоритма.
Мотивация
Зачем нужно использовать потенциалы Джонсона?
Идея аналогична идее, использующейся в алгоритме Джонсона.
При поиске потока минимальной стоимости методом дополнения вдоль путей минимальной стоимости нам требуется находить минимальный по стоимости поток из истока в сток. Это реализуется с помощью алгоритмов поиска кратчайшего пути в графе. Поскольку стоимость некоторых рёбер может быть отрицательной, нам приходится использовать алгоритм Форда-Беллмана. Однако гораздо эффективней было бы применить алгоритм Дейкстры для этой же цели, так как у него гораздо лучше асимптотика. Для этого нам надо перевзвесить рёбра графа.
Определение: |
Пусть дана транспортная сеть | , где — множество вершин графа, а — множество рёбер. Введем в каждой вершине потенциал . Тогда остаточная стоимость ребра определяется как
Заметим, что сумма остаточных стоимостей ребер вдоль любого пути отличается от суммы стоимостей вдоль того же самого пути на разность между потенциалом первой и последней вершины.
Использование потенциалов Джонсона
Возьмём значения потенциалов в вершинах равными минимальному по цене расстоянию от стока до них или алгоритма Форда-Беллмана. Таким образом, нам его придётся запустить всего один раз, а не на каждом шаге алгоритма.
, если она недостижима. Так как — это длина какого-то пути до вершины , а — длина минимального пути, то , что от нас и требовалось. Значения потенциалов найдём с помощьюРеализация
Модифицируем псевдокод из статьи про поиск потока минимальной стоимости методом дополнения вдоль путей минимальной стоимости:
for{ } Запустим алгоритм Форда-Беллмана, в результате для каждой вершины: — расстояние , если за длину ребра принимается его стоимость. for { } while (существует путь в остаточной сети ) { кратчайший в смысле стоимости путь дополнить поток вдоль }
Асимптотика
Пусть все пропускные способности целочисленны. Метод целиком работает за , где — время одной итерации.
Время, затраченное на одну итерацию, определяется скоростью поиска кратчайшего пути. Если для этой цели использовать алгоритм Дейкстры с Фиббоначевыми кучами, то поиск мы осуществим за .
Не стоит так же забывать, что для расчёта потенциалов мы один раз запустили Алгоритм Форда-Беллмана. В результате получим время работы
.Это лучше, чем алгоритма Форда-Беллмана для поиска кратчайшего пути на каждой итерации.
, что получается при использованииЛитература
- Andrew V. Goldberg An Efficient implementation of a scaling minimum-cost flow algorithm - Journal of Algorithms, 1997