Использование потенциалов Джонсона при поиске потока минимальной стоимости — различия между версиями
м (→Реализация) |
(→Асимптотика) |
||
Строка 35: | Строка 35: | ||
Обозначим время работы поиска кратчайшего пути <tex>F(V, E)</tex>. | Обозначим время работы поиска кратчайшего пути <tex>F(V, E)</tex>. | ||
[[Поиск потока минимальной стоимости методом дополнения вдоль путей минимальной стоимости|Поиск потока минимальной стоимости методом дополнения вдоль путей минимальной стоимости]] работает за <tex>O(F(V, E) \cdot |f|)</tex>. | [[Поиск потока минимальной стоимости методом дополнения вдоль путей минимальной стоимости|Поиск потока минимальной стоимости методом дополнения вдоль путей минимальной стоимости]] работает за <tex>O(F(V, E) \cdot |f|)</tex>. | ||
− | Если использовать [[Алгоритм Дейкстры|алгоритм Дейкстры]] с Фиббоначевыми кучами, то <tex>F(V, E)= V log V + E</tex>. В результате получим время работы <tex>O((V log V + E) \cdot |f|)</tex>. | + | Если использовать [[Алгоритм Дейкстры|алгоритм Дейкстры]] с Фиббоначевыми кучами, то <tex>F(V, E)= 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>, что получается при использовании [[Алгоритм Форда-Беллмана|алгоритма Форда-Беллмана]]. |
Версия 01:51, 17 января 2012
Мотивация
Идея аналогична идее, использующейся в алгоритме Джонсона.
При поиске потока минимальной стоимости методом дополнения вдоль путей минимальной стоимости нам требуется находить минимальный по стоимости поток из истока в сток. Поскольку стоимость некоторых рёбер может быть отрицательной, нам приходится использовать алгоритм Форда-Беллмана для поиска кратчайшего пути. Однако гораздо эффективней было бы применить алгоритм Дейкстры. Для этого нам надо перевзвесить рёбра графа.
Определение: |
Пусть дана транспортная сеть | . Введем в каждой вершине потенциал . Тогда остаточная стоимость ребра определяется как
Заметим, что сумма остаточных стоимостей ребер вдоль любого пути отличается от суммы стоимостей вдоль того же самого пути на разность между потенциалом первой и последней вершины.
Использование потенциалов Джонсона
Возьмём значения потенциалов в вершинах равными минимальному по цене расстоянию от стока до них или алгоритма Форда-Беллмана. Таким образом, нам его придётся запустить всего один раз, а не на каждом шаге алгоритма.
, если она недостижима. Так как - это длина какого-то пути до вершины , а - длина минимального пути, то , что от нас и требовалось. Значения потенциалов найдём с помощьюРеализация
Модифицируем псевдокод из статьи про поиск потока минимальной стоимости методом дополнения вдоль путей минимальной стоимости:
for{ } Запустим алгоритм Форда-Беллмана, в результате для каждой вершины: - расстояние , если за длину ребра принимается его стоимость. for { } while (существует путь в остаточной сети ) { кратчайший в смысле стоимости путь дополнить поток вдоль }
Асимптотика
Пусть все пропускные способности целочислены. Обозначим время работы поиска кратчайшего пути Поиск потока минимальной стоимости методом дополнения вдоль путей минимальной стоимости работает за . Если использовать алгоритм Дейкстры с Фиббоначевыми кучами, то . В результате получим время работы .
.Это лучше, чем алгоритма Форда-Беллмана.
, что получается при использованииЛитература
- Кормен Т., Лейзерсон Ч., Ривест Р. Алгоритмы: построение и анализ. 2-е изд. — М.: Издательский дом «Вильямс», 2007. — С. 1296.