Изменения

Перейти к: навигация, поиск

Поток минимальной стоимости

4193 байта добавлено, 19:41, 4 сентября 2022
м
rollbackEdits.php mass rollback
== Определение задачи Задача о потоке минимальной стоимости== 
{{Определение
|definition=Дано число Пусть дана сеть <mathtex>f_0G(V,E)</mathtex>. <tex> S, T \in V</tex> {{---}} источник и транспортная сеть сток. Ребра <mathtex>(u,v) \in E</tex> имееют пропускную способность <tex> c(u, v), </tex> поток <tex> f(u,Gv) </tex> и цену за единицу потока <tex>a(Vu,Ev)</mathtex>. Тогда '''общая стоимость потока''' из <tex>S</tex> в <tex>T</tex> с источником ::<mathtex>s 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)</mathtex> * Поток из <tex>u</tex> в <tex>v</tex> должен быть противоположным потоку из <tex>v</tex> в <tex>u</tex>. :<tex>f(u, v)=-f(v, u)</tex>* Сохранение потока. Для каждой вершины, сумма входящего и стоком исходящего потоков равно <tex>0</tex>.:<mathtex>t \sum\limits_{w \in V} f(u,w) = 0</tex> {{Задача|definition = Дана сеть <tex>G(V,E)</mathtex>. <tex>S, где ребра T \in V</tex> {{---}} источник и сток. Ребра <mathtex>(u,v) \in E</mathtex> имеют имееют пропускную способность <mathtex> c(u, v), </tex> поток <tex> f(u,v) </tex> {{---}}и цену за единицу потока <tex> a(u, v) </tex>. Требуется найти максимальный поток, суммарная стоимость которого минимальна.}} == Алгоритмы решения =====Метод устранения отрицательных циклов в остаточной сети===Воспользуемся [[Лемма об эквивалентности свойства потока быть минимальной стоимости и отсутствии отрицательных циклов в остаточной сети|леммой об эквивалентности свойства потока быть минимальной стоимости и отсутствии отрицательных циклов в остаточной сети]]. Получим следующий алгоритм:====Алгоритм====* '''Начало.'''* '''Шаг 1'''. Определим для каждого прямого ребра <tex>(u,v)</tex>\обратное ребро <tex>(v,u)</tex>. Определим его характеристики: <tex>c(v,u)=0</tex>, <tex>f(v,u)=-f(u,v)</mathtex>, <tex>a(v,u)=-a(u,v)</tex>.* '''Шаг 2'''. Для каждого ребра зададим поток равный <tex>0<math/tex>.* '''Шаг 3'''. Найдем произвольный максимальный поток(любым алгоритмом нахождения максимального потока), построим для него остаточную сеть, где каждому ребру будет соответствовать величина <tex>a(u,v) \cdot (c(u,v) - f(u,v))</mathtex> и цену .* '''Шаг 4'''. При помощи [[Алгоритм Форда-Беллмана| алгоритма Форда-Беллмана]] найдем отрицательный цикл в построенной сети (отрицательный цикл ищется по стоимости ребра, т.е. ребра имеют вес <mathtex>\,pa(u,v)</mathtex>). Если отрицательный цикл не нашелся {{---}} перейдем к '''шагу 6'''.* '''Шаг 5'''. Избавимся от отрицательного цикла, для этого пустим по нему максимально возможный поток. Величина потока равна минимальной остаточной пропускной способности в цикле. Перейдем к '''шагу 4'''.* '''Шаг 6'''. Отрицательных циклов в остаточной сети нет, значит, максимальный поток минимальной стоимости найден.* '''Конец.'''
Суть задачи — найти поток ''f''====Асимптотика====Алгоритм Форда-Беллмана работает за <tex>O(''u''VE)</tex>, улучшение цикла за <tex>O(E)</tex>. Если обозначить максимальную стоимость потока как <tex>C</tex>, а максимальную пропускную способность как <tex>U</tex>, ''v''то алгоритм совершит <tex>O(ECU):</tex> итераций поиска цикла, если каждое улучшение цикла будет улучшать его на 1. В итоге имеем <tex>O(V E^2 C U + maxFlow)</tex>, где <tex>maxFlow</tex> - асимптотика поиска максимального потока.
:<math>\sum_===Метод дополнения потока вдоль путей минимальной стоимости==={u,v \in V} p(u,v) \cdot f(u,v) - min </math>.:<math>\sum_{u,v \in V} f(u,v) = f_0</math>main|Поиск потока минимальной стоимости методом дополнения вдоль путей минимальной стоимости}}
== Релевантные теоремы =Использование потенциалов Джонсона===*[[Теорема_Форда-Фалкерсона_о_потоке_минимальной_стоимости|Теорема Форда-Фалкерсона о потоке минимальной стоимости]]*[[Лемма_об_эквивалентности_свойства_потока_быть_минимальной_стоимости_и_отсутствии_отрицательных_циклов_в_остаточной_сети{{main|Лемма об эквивалентности свойства Использование потенциалов Джонсона при поиске потока быть минимальной стоимости и отсутствии отрицательных циклов в остаточной сети]]}}
== См. также ==
* [[Сведение задачи о назначениях к задаче о потоке минимальной стоимости|Сведение задачи о назначениях к задаче о потоке минимальной стоимости]]
* [[Венгерский алгоритм решения задачи о назначениях|Венгерский алгоритм решения задачи о назначениях]]
== Алгоритмы решения Источники информации ==*Найти любой поток величины <math>f_0<[http://math>, после чего избавиться от всех циклов отрицательной стоимости в остаточном графеru. Чтобы избавиться от цикла, надо пустить по нему максимально возможный потокwikipedia.org/wiki/Поток_минимальной_стоимости Википедия {{---}} Поток минимальной стоимости]*[[Поиск_потока_минимальной_стоимости_методом_дополнения_вдоль_путей_минимальной_стоимости|Поиск http://rain.ifmo.ru/cat/view.php/vis/graph-flow-match/min-cost-max-flow-2009 Визуализатор алгоритма нахождения максимального потока минимальной стоимости методом дополнения вдоль путей минимальной стоимости]].*[[Использование_потенциалов_Джонсона_при_поиске_потока_минимальной_стоимости|Использование потенциалов Джонсона при поиске потока http://habrahabr.ru/blogs/algorithm/61884/ Хабрахабр {{---}} Максимальный поток минимальной стоимости ]* ''Кормен, Томас Х., Лейзерсон, Чарльз И., Ривест, Рональд Л., Штайн Клиффорд'' '''Алгоритмы: построение и анализ''', 2-е издание. Пер. с англ. {{---}} М.:Издательский дом "Вильямс", 2010. {{---}} 1296 с.: ил. {{---}} Парал. тит. англ. {{---}} ISBN 978-5-8459-0857-5 (модификация предыдущего алгоритмарус.)]].
== Задача о назначениях ==
Популярная задача, которая легко сводится к потоку минимальной стоимости - [[Сведение_задачи_о_назначениях_к_задаче_о_потоке_минимальной_стоимости|задача о назначениях]].
== Источники ==[[Категория:Алгоритмы и структуры данных]]*[http[Категория://ru.wikipedia.org/wiki/Поток_минимальной_стоимости ВикипедияЗадача о потоке минимальной стоимости]]
1632
правки

Навигация