<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=80.79.116.136&amp;*</id>
		<title>Викиконспекты - Вклад участника [ru]</title>
		<link rel="self" type="application/atom+xml" href="http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=80.79.116.136&amp;*"/>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/80.79.116.136"/>
		<updated>2026-04-13T00:24:29Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%BE%D1%82%D0%BE%D0%BA_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9_%D1%81%D1%82%D0%BE%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8&amp;diff=74090</id>
		<title>Поток минимальной стоимости</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%BE%D1%82%D0%BE%D0%BA_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9_%D1%81%D1%82%D0%BE%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8&amp;diff=74090"/>
				<updated>2020-05-02T19:48:58Z</updated>
		
		<summary type="html">&lt;p&gt;80.79.116.136: /* Алгоритм */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Задача о потоке минимальной стоимости==&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Пусть дана сеть &amp;lt;tex&amp;gt;G(V,E)&amp;lt;/tex&amp;gt;. &amp;lt;tex&amp;gt;S, T \in V&amp;lt;/tex&amp;gt; {{---}} источник и сток. Ребра &amp;lt;tex&amp;gt;(u,v) \in E&amp;lt;/tex&amp;gt; имееют пропускную способность &amp;lt;tex&amp;gt; c(u, v), &amp;lt;/tex&amp;gt; поток &amp;lt;tex&amp;gt; f(u,v) &amp;lt;/tex&amp;gt; и цену за единицу потока &amp;lt;tex&amp;gt;a(u, v) &amp;lt;/tex&amp;gt;. Тогда '''общая стоимость потока''' из &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt;:&lt;br /&gt;
:&amp;lt;tex&amp;gt;p(u,v) = \sum\limits_{u,v \in V, f(u,v)&amp;gt;0} a(u,v) \cdot f(u,v)&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
===Свойства сети===&lt;br /&gt;
* Поток не может превысить пропускную способность. &lt;br /&gt;
:&amp;lt;tex&amp;gt;f(u,v) \leqslant c(u,v)&amp;lt;/tex&amp;gt;&lt;br /&gt;
* Поток из &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; должен быть противоположным потоку из &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt;. &lt;br /&gt;
:&amp;lt;tex&amp;gt;f(u, v)=-f(v, u)&amp;lt;/tex&amp;gt;&lt;br /&gt;
* Сохранение потока. Для каждой вершины, сумма входящего и исходящего потоков равно &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;.&lt;br /&gt;
:&amp;lt;tex&amp;gt; \sum\limits_{w \in V} f(u,w) = 0&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Задача&lt;br /&gt;
|definition = Дана сеть &amp;lt;tex&amp;gt;G(V,E)&amp;lt;/tex&amp;gt;. &amp;lt;tex&amp;gt;S, T \in V&amp;lt;/tex&amp;gt; {{---}} источник и сток. Ребра &amp;lt;tex&amp;gt;(u,v) \in E&amp;lt;/tex&amp;gt; имееют пропускную способность &amp;lt;tex&amp;gt; c(u, v), &amp;lt;/tex&amp;gt; поток &amp;lt;tex&amp;gt; f(u,v) &amp;lt;/tex&amp;gt; {{---}}&lt;br /&gt;
и цену за единицу потока &amp;lt;tex&amp;gt; a(u, v) &amp;lt;/tex&amp;gt;. Требуется найти максимальный поток, суммарная стоимость которого минимальна.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Алгоритмы решения ==&lt;br /&gt;
===Метод устранения отрицательных циклов в остаточной сети===&lt;br /&gt;
Воспользуемся [[Лемма об эквивалентности свойства потока быть минимальной стоимости и отсутствии отрицательных циклов в остаточной сети|леммой об эквивалентности свойства потока быть минимальной стоимости и отсутствии отрицательных циклов в остаточной сети]]. Получим следующий алгоритм:&lt;br /&gt;
====Алгоритм====&lt;br /&gt;
* '''Начало.'''&lt;br /&gt;
* '''Шаг 1'''. Определим для каждого прямого ребра &amp;lt;tex&amp;gt;(u,v)&amp;lt;/tex&amp;gt; обратное ребро &amp;lt;tex&amp;gt;(v,u)&amp;lt;/tex&amp;gt;. Определим его характеристики: &amp;lt;tex&amp;gt;c(v,u)=0&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;f(v,u)=-f(u,v)&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;a(v,u)=-a(u,v)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
* '''Шаг 2'''. Для каждого ребра зададим поток равный &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;.&lt;br /&gt;
* '''Шаг 3'''. Найдем произвольный максимальный поток(любым алгоритмом нахождения максимального потока), построим для него остаточную сеть, где каждому ребру будет соответствовать величина &amp;lt;tex&amp;gt;a(u,v) \cdot (c(u,v) - f(u,v))&amp;lt;/tex&amp;gt;.&lt;br /&gt;
* '''Шаг 4'''. При помощи [[Алгоритм Форда-Беллмана| алгоритма Форда-Беллмана]] найдем отрицательный цикл в построенной сети (отрицательный цикл ищется по стоимости ребра, т.е. ребра имеют вес &amp;lt;tex&amp;gt;a(u,v)&amp;lt;/tex&amp;gt;). Если отрицательный цикл не нашелся {{---}} перейдем к '''шагу 6'''.&lt;br /&gt;
* '''Шаг 5'''. Избавимся от отрицательного цикла, для этого пустим по нему максимально возможный поток. Величина потока равна минимальной остаточной пропускной способности в цикле. Перейдем к '''шагу 4'''.&lt;br /&gt;
* '''Шаг 6'''. Отрицательных циклов в остаточной сети нет, значит, максимальный поток минимальной стоимости найден.&lt;br /&gt;
* '''Конец.'''&lt;br /&gt;
&lt;br /&gt;
====Асимптотика====&lt;br /&gt;
Алгоритм Форда-Беллмана работает за &amp;lt;tex&amp;gt;O(VE)&amp;lt;/tex&amp;gt;, улучшение цикла за &amp;lt;tex&amp;gt;O(E)&amp;lt;/tex&amp;gt;. Если обозначить максимальную стоимость потока как &amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt;, а максимальную пропускную способность как &amp;lt;tex&amp;gt;U&amp;lt;/tex&amp;gt;, то алгоритм совершит &amp;lt;tex&amp;gt;O(ECU)&amp;lt;/tex&amp;gt; итераций поиска цикла, если каждое улучшение цикла будет улучшать его на 1. В итоге имеем &amp;lt;tex&amp;gt;O(V E^2 C U + maxFlow)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;maxFlow&amp;lt;/tex&amp;gt; - асимптотика поиска максимального потока.&lt;br /&gt;
&lt;br /&gt;
===Метод дополнения потока вдоль путей минимальной стоимости===&lt;br /&gt;
{{main|Поиск потока минимальной стоимости методом дополнения вдоль путей минимальной стоимости}}&lt;br /&gt;
&lt;br /&gt;
===Использование потенциалов Джонсона===&lt;br /&gt;
{{main|Использование потенциалов Джонсона при поиске потока минимальной стоимости}}&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Сведение задачи о назначениях к задаче о потоке минимальной стоимости|Сведение задачи о назначениях к задаче о потоке минимальной стоимости]]&lt;br /&gt;
* [[Венгерский алгоритм решения задачи о назначениях|Венгерский алгоритм решения задачи о назначениях]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
*[http://ru.wikipedia.org/wiki/Поток_минимальной_стоимости Википедия {{---}} Поток минимальной стоимости]&lt;br /&gt;
*[http://rain.ifmo.ru/cat/view.php/vis/graph-flow-match/min-cost-max-flow-2009 Визуализатор алгоритма нахождения максимального потока минимальной стоимости]&lt;br /&gt;
*[http://habrahabr.ru/blogs/algorithm/61884/ Хабрахабр {{---}} Максимальный поток минимальной стоимости]&lt;br /&gt;
* ''Кормен, Томас Х., Лейзерсон, Чарльз И., Ривест, Рональд Л., Штайн Клиффорд'' '''Алгоритмы: построение и анализ''', 2-е издание. Пер. с англ. {{---}} М.:Издательский дом &amp;quot;Вильямс&amp;quot;, 2010. {{---}} 1296 с.: ил. {{---}} Парал. тит. англ. {{---}} ISBN 978-5-8459-0857-5 (рус.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория:Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория: Задача о потоке минимальной стоимости]]&lt;/div&gt;</summary>
		<author><name>80.79.116.136</name></author>	</entry>

	</feed>