Использование потенциалов Джонсона при поиске потока минимальной стоимости — различия между версиями
Proshev (обсуждение | вклад) |
(Исправление конспекта) |
||
| Строка 1: | Строка 1: | ||
| − | == | + | == Мотивация == |
| + | |||
| + | При [[Поиск потока минимальной стоимости методом дополнения вдоль путей минимальной стоимости|поиске потока минимальной стоимости методом дополнения вдоль путей минимальной стоимости]] нам требуется находить минимальный по стоимости поток из истока в сток. Поскольку стоимость некоторых рёбер может быть отрицательной, нам приходится использовать [[Алгоритм Форда-Беллмана|алгоритм Форда-Беллмана]] для поиска кратчайшего пути. Однако гораздо эффективней было бы применить [[Алгоритм Дейкстры|алгоритм Дейкстры]]. Для этого нам надо перевзвесить рёбра графа. | ||
| + | |||
{{Определение | {{Определение | ||
|definition=Пусть дана транспортная сеть <tex>\,G(V,E)</tex>. Введем в каждой вершине потенциал <tex>\,P_i</tex>. Тогда остаточная стоимость ребра <tex>\,C_{P_{ij}}</tex> определяется как | |definition=Пусть дана транспортная сеть <tex>\,G(V,E)</tex>. Введем в каждой вершине потенциал <tex>\,P_i</tex>. Тогда остаточная стоимость ребра <tex>\,C_{P_{ij}}</tex> определяется как | ||
| Строка 7: | Строка 10: | ||
== Использование потенциалов Джонсона == | == Использование потенциалов Джонсона == | ||
| − | + | Возьмём значения потенциалов в вершинах равными минимальному по цене расстоянию от стока до них, или <tex>+\infty</tex> если она недостижима. Так как <tex>\,C_{ij} + P_i</tex> это длина какого-то пути до вершины <tex>\,j</tex>, а <tex>\,P_j</tex> - длина минимального пути, то <tex>C_{P_{ij}} \geqslant 0</tex>, что от нас и требовалось. | |
| + | Значения потенциалов найдём с помощью [[Алгоритм Форда-Беллмана|алгоритма Форда-Беллмана]]. Таким образом, нам его придётся запустить всего один раз, а не на каждом шаге алгоритма. | ||
| + | |||
| + | ==Асимптотика== | ||
| + | Обозначим время работы поиска кратчайшего пути <tex>F(V, E)</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>. | ||
| − | + | == См. также == | |
| + | * [[Алгоритм Дейкстры]] | ||
| + | * [[Алгоритм Форда-Беллмана]] | ||
| + | * [[Поиск потока минимальной стоимости методом дополнения вдоль путей минимальной стоимости]] | ||
| + | * [[Алгоритм Джонсона]] | ||
[[Категория: Задача о потоке минимальной стоимости]] | [[Категория: Задача о потоке минимальной стоимости]] | ||
Версия 02:09, 1 января 2012
Мотивация
При поиске потока минимальной стоимости методом дополнения вдоль путей минимальной стоимости нам требуется находить минимальный по стоимости поток из истока в сток. Поскольку стоимость некоторых рёбер может быть отрицательной, нам приходится использовать алгоритм Форда-Беллмана для поиска кратчайшего пути. Однако гораздо эффективней было бы применить алгоритм Дейкстры. Для этого нам надо перевзвесить рёбра графа.
| Определение: |
| Пусть дана транспортная сеть . Введем в каждой вершине потенциал . Тогда остаточная стоимость ребра определяется как |
Заметим что сумма остаточных стоимостей ребер вдоль любого пути отличается от суммы стоимостей вдоль того же самого пути на разность между потенциалом первой и последней вершины.
Использование потенциалов Джонсона
Возьмём значения потенциалов в вершинах равными минимальному по цене расстоянию от стока до них, или если она недостижима. Так как это длина какого-то пути до вершины , а - длина минимального пути, то , что от нас и требовалось. Значения потенциалов найдём с помощью алгоритма Форда-Беллмана. Таким образом, нам его придётся запустить всего один раз, а не на каждом шаге алгоритма.
Асимптотика
Обозначим время работы поиска кратчайшего пути . Поиске потока минимальной стоимости методом дополнения вдоль путей минимальной стоимости работает за . Если использовать алгоритм Дейкстры с Фиббоначевыми кучами, то . В результате получим время работы .