Поток минимальной стоимости — различия между версиями
(→Метод устранения отрицательных циклов в остаточной сети) |
(Поправил определение, которое не значило ничего и путало обозначениями) |
||
(не показано 18 промежуточных версий 4 участников) | |||
Строка 2: | Строка 2: | ||
{{Определение | {{Определение | ||
− | |definition=Пусть дана сеть <tex>G(V,E)</tex>. <tex>S, T \in V</tex> {{---}} источник и сток. <tex> | + | |definition=Пусть дана сеть <tex>G(V,E)</tex>. <tex>S, T \in V</tex> {{---}} источник и сток. Ребра <tex>(u,v) \in E</tex> имееют пропускную способность <tex> c(u, v), </tex> поток <tex> f(u,v) </tex> и цену за единицу потока <tex>a(u, v) </tex>. Тогда '''общая стоимость потока''' из <tex>S</tex> в <tex>T</tex>: |
− | :<tex>p(u,v) = \sum\limits_{u,v \in V, f(u,v)>0} | + | :<tex>p(u,v) = \sum\limits_{u,v \in V, f(u,v)>0} a(u,v) \cdot f(u,v)</tex> |
}} | }} | ||
− | ===Свойства | + | ===Свойства сети=== |
* Поток не может превысить пропускную способность. | * Поток не может превысить пропускную способность. | ||
:<tex>f(u,v) \leqslant c(u,v)</tex> | :<tex>f(u,v) \leqslant c(u,v)</tex> | ||
* Поток из <tex>u</tex> в <tex>v</tex> должен быть противоположным потоку из <tex>v</tex> в <tex>u</tex>. | * Поток из <tex>u</tex> в <tex>v</tex> должен быть противоположным потоку из <tex>v</tex> в <tex>u</tex>. | ||
:<tex>f(u, v)=-f(v, u)</tex> | :<tex>f(u, v)=-f(v, u)</tex> | ||
− | * Сохранение потока. Для каждой вершины, сумма входящего и исходящего потоков равно 0. | + | * Сохранение потока. Для каждой вершины, сумма входящего и исходящего потоков равно <tex>0</tex>. |
:<tex> \sum\limits_{w \in V} f(u,w) = 0</tex> | :<tex> \sum\limits_{w \in V} f(u,w) = 0</tex> | ||
{{Задача | {{Задача | ||
− | |definition = Дана сеть <tex>G(V,E)</tex>. <tex>S, T \in V</tex> {{---}} источник и сток. <tex> | + | |definition = Дана сеть <tex>G(V,E)</tex>. <tex>S, T \in V</tex> {{---}} источник и сток. Ребра <tex>(u,v) \in E</tex> имееют пропускную способность <tex> c(u, v), </tex> поток <tex> f(u,v) </tex> {{---}} |
+ | и цену за единицу потока <tex> a(u, v) </tex>. Требуется найти максимальный поток, суммарная стоимость которого минимальна. | ||
}} | }} | ||
Строка 20: | Строка 21: | ||
===Метод устранения отрицательных циклов в остаточной сети=== | ===Метод устранения отрицательных циклов в остаточной сети=== | ||
Воспользуемся [[Лемма об эквивалентности свойства потока быть минимальной стоимости и отсутствии отрицательных циклов в остаточной сети|леммой об эквивалентности свойства потока быть минимальной стоимости и отсутствии отрицательных циклов в остаточной сети]]. Получим следующий алгоритм: | Воспользуемся [[Лемма об эквивалентности свойства потока быть минимальной стоимости и отсутствии отрицательных циклов в остаточной сети|леммой об эквивалентности свойства потока быть минимальной стоимости и отсутствии отрицательных циклов в остаточной сети]]. Получим следующий алгоритм: | ||
+ | ====Алгоритм==== | ||
+ | * '''Начало.''' | ||
+ | * '''Шаг 1'''. Требуется найти максимальный поток минимальной стоимости. | ||
+ | * '''Шаг 2'''. Для каждого ребра зададим поток равный <tex>0</tex>. | ||
+ | * '''Шаг 3'''. Построим остаточную сеть <tex>G_f</tex>. | ||
+ | * '''Шаг 4'''. При помощи [[Алгоритм Форда-Беллмана| алгоритма Форда-Беллмана]] найдем отрицательные циклы в остаточной сети. Если нет {{---}} перейдем к '''шагу 7'''. | ||
+ | * '''Шаг 5'''. Выберем один из отрицательных циклов. | ||
+ | * '''Шаг 6'''. Избавимся от отрицательного цикла, для этого пустим по нему максимально возможный поток. Перейдем к '''шагу 5'''. | ||
+ | * '''Шаг 7'''. Отрицательных циклов в остаточной сети нет, значит, максимальный поток минимальной стоимости найден. | ||
+ | * '''Конец.''' | ||
− | + | ====Асимптотика==== | |
− | + | Алгоритм Форда-Беллмана работает за <tex>O(VE)</tex>. Нахождение максимального потока и улучшение цикла работает за <tex>O(E)</tex>. В итоге имеем <tex>O(V E^2)</tex>. | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
===Метод дополнения потока вдоль путей минимальной стоимости=== | ===Метод дополнения потока вдоль путей минимальной стоимости=== | ||
− | + | {{main|Поиск_потока_минимальной_стоимости_методом_дополнения_вдоль_путей_минимальной_стоимости}} | |
+ | |||
===Использование потенциалов Джонсона=== | ===Использование потенциалов Джонсона=== | ||
− | + | {{main|Использование_потенциалов_Джонсона_при_поиске_потока_минимальной_стоимости}} | |
== См. также == | == См. также == | ||
Строка 41: | Строка 46: | ||
== Источники информации == | == Источники информации == | ||
− | *[http://ru.wikipedia.org/wiki/Поток_минимальной_стоимости Википедия - Поток минимальной стоимости] | + | *[http://ru.wikipedia.org/wiki/Поток_минимальной_стоимости Википедия {{---}} Поток минимальной стоимости] |
*[http://rain.ifmo.ru/cat/view.php/vis/graph-flow-match/min-cost-max-flow-2009 Визуализатор алгоритма нахождения максимального потока минимальной стоимости] | *[http://rain.ifmo.ru/cat/view.php/vis/graph-flow-match/min-cost-max-flow-2009 Визуализатор алгоритма нахождения максимального потока минимальной стоимости] | ||
− | *[http://habrahabr.ru/blogs/algorithm/61884/ Хабрахабр - Максимальный поток минимальной стоимости] | + | *[http://habrahabr.ru/blogs/algorithm/61884/ Хабрахабр {{---}} Максимальный поток минимальной стоимости] |
− | * ''Кормен, Томас Х., Лейзерсон, Чарльз И., Ривест, Рональд Л., Штайн Клиффорд'' '''Алгоритмы: построение и анализ''', 2-е издание. Пер. с англ. | + | * ''Кормен, Томас Х., Лейзерсон, Чарльз И., Ривест, Рональд Л., Штайн Клиффорд'' '''Алгоритмы: построение и анализ''', 2-е издание. Пер. с англ. {{---}} М.:Издательский дом "Вильямс", 2010. {{---}} 1296 с.: ил. {{---}} Парал. тит. англ. {{---}} ISBN 978-5-8459-0857-5 (рус.) |
[[Категория:Алгоритмы и структуры данных]] | [[Категория:Алгоритмы и структуры данных]] | ||
[[Категория: Задача о потоке минимальной стоимости]] | [[Категория: Задача о потоке минимальной стоимости]] |
Версия 19:07, 14 декабря 2018
Содержание
Задача о потоке минимальной стоимости
Определение: |
Пусть дана сеть | . — источник и сток. Ребра имееют пропускную способность поток и цену за единицу потока . Тогда общая стоимость потока из в :
Свойства сети
- Поток не может превысить пропускную способность.
- Поток из в должен быть противоположным потоку из в .
- Сохранение потока. Для каждой вершины, сумма входящего и исходящего потоков равно .
Задача: |
Дана сеть | . — источник и сток. Ребра имееют пропускную способность поток — и цену за единицу потока . Требуется найти максимальный поток, суммарная стоимость которого минимальна.
Алгоритмы решения
Метод устранения отрицательных циклов в остаточной сети
Воспользуемся леммой об эквивалентности свойства потока быть минимальной стоимости и отсутствии отрицательных циклов в остаточной сети. Получим следующий алгоритм:
Алгоритм
- Начало.
- Шаг 1. Требуется найти максимальный поток минимальной стоимости.
- Шаг 2. Для каждого ребра зададим поток равный .
- Шаг 3. Построим остаточную сеть .
- Шаг 4. При помощи алгоритма Форда-Беллмана найдем отрицательные циклы в остаточной сети. Если нет — перейдем к шагу 7.
- Шаг 5. Выберем один из отрицательных циклов.
- Шаг 6. Избавимся от отрицательного цикла, для этого пустим по нему максимально возможный поток. Перейдем к шагу 5.
- Шаг 7. Отрицательных циклов в остаточной сети нет, значит, максимальный поток минимальной стоимости найден.
- Конец.
Асимптотика
Алгоритм Форда-Беллмана работает за
. Нахождение максимального потока и улучшение цикла работает за . В итоге имеем .Метод дополнения потока вдоль путей минимальной стоимости
Использование потенциалов Джонсона
См. также
- Сведение задачи о назначениях к задаче о потоке минимальной стоимости
- Венгерский алгоритм решения задачи о назначениях
Источники информации
- Википедия — Поток минимальной стоимости
- Визуализатор алгоритма нахождения максимального потока минимальной стоимости
- Хабрахабр — Максимальный поток минимальной стоимости
- Кормен, Томас Х., Лейзерсон, Чарльз И., Ривест, Рональд Л., Штайн Клиффорд Алгоритмы: построение и анализ, 2-е издание. Пер. с англ. — М.:Издательский дом "Вильямс", 2010. — 1296 с.: ил. — Парал. тит. англ. — ISBN 978-5-8459-0857-5 (рус.)