Редактирование: Поток минимальной стоимости

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

Внимание! Вы не авторизовались на сайте. Ваш IP-адрес будет публично видимым, если вы будете вносить любые правки. Если вы войдёте или создадите учётную запись, правки вместо этого будут связаны с вашим именем пользователя, а также у вас появятся другие преимущества.

Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.
Текущая версия Ваш текст
Строка 2: Строка 2:
  
 
{{Определение
 
{{Определение
|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>:
+
|definition='''Стоимость потока'''. Дана сеть <tex>G(V,E)</tex>. <tex>S, T \in V</tex> {{---}} источник и сток. <tex>\forall (u,v) \in E</tex> <tex>\exists c(u, v), f(u,v)</tex> {{---}} стоимость пересылки единицы потока и пропускная способность. Тогда '''общая стоимость потока''' из <tex>S</tex> в <tex>T</tex>:
:<tex>p(u,v) = \sum\limits_{u,v \in V, f(u,v)>0} a(u,v) \cdot f(u,v)</tex>
+
:<tex>p(u,v) = \sum\limits_{u,v \in V, f(u,v)>0} c(u,v) \cdot f(u,v)</tex>
 
}}
 
}}
===Свойства сети===
+
===Свойства стоимости===
 
* Поток не может превысить пропускную способность.  
 
* Поток не может превысить пропускную способность.  
:<tex>f(u,v) \leqslant c(u,v)</tex>
+
:<tex>f(u,v) \le 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>
* Сохранение потока. Для каждой вершины, сумма входящего и исходящего потоков равно <tex>0</tex>.
+
* Сохранение потока. Для каждой вершины, сумма входящего и исходящего потоков равно 0.
 
:<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>(u,v) \in E</tex> имееют пропускную способность <tex> c(u, v), </tex> поток <tex> f(u,v) </tex> {{---}}
+
|definition = Дана сеть <tex>G(V,E)</tex>. <tex>S, T \in V</tex> {{---}} источник и сток. <tex>\forall (u,v) \in E</tex> <tex>\exists c(u, v), f(u,v)</tex> {{---}} стоимость пересылки единицы потока и пропускная способность. Требуется найти максимальный поток, суммарная стоимость которого минимальна.
и цену за единицу потока <tex> a(u, v) </tex>. Требуется найти максимальный поток, суммарная стоимость которого минимальна.
 
 
}}
 
}}
  
== Алгоритмы решения ==
+
=== Алгоритмы решения ===
===Метод устранения отрицательных циклов в остаточной сети===
+
* Воспользуемся [[Лемма об эквивалентности свойства потока быть минимальной стоимости и отсутствии отрицательных циклов в остаточной сети|Леммой об эквивалентности свойства потока быть минимальной стоимости и отсутствии отрицательных циклов в остаточной сети]].
Воспользуемся [[Лемма об эквивалентности свойства потока быть минимальной стоимости и отсутствии отрицательных циклов в остаточной сети|леммой об эквивалентности свойства потока быть минимальной стоимости и отсутствии отрицательных циклов в остаточной сети]]. Получим следующий алгоритм:
+
** Найдем любой поток величины <tex>f_0</tex>.
====Алгоритм====
+
** При помощи [[Алгоритм Форда-Беллмана|Форда-Беллмана]] найдем отрицательные циклы в остаточной сети.
* '''Начало.'''
+
** Избавимся от всех найденных циклов, для этого, пустим по ним максимально возможный поток.
* '''Шаг 1'''. Определим для каждого прямого ребра <tex>(u,v)</tex> обратное ребро <tex>(v,u)</tex>. Определим его характеристики: <tex>c(v,u)=0</tex>, <tex>f(v,u)=-f(u,v)</tex>, <tex>a(v,u)=-a(u,v)</tex>.
 
* '''Шаг 2'''. Для каждого ребра зададим поток равный <tex>0</tex>.
 
* '''Шаг 3'''. Найдем произвольный максимальный поток(любым алгоритмом нахождения максимального потока), построим для него остаточную сеть, где каждому ребру будет соответствовать величина <tex>a(u,v) \cdot (c(u,v) - f(u,v))</tex>.
 
* '''Шаг 4'''. При помощи [[Алгоритм Форда-Беллмана| алгоритма Форда-Беллмана]] найдем отрицательный цикл в построенной сети. Если отрицательный цикл не нашелся {{---}} перейдем к '''шагу 6'''.
 
* '''Шаг 5'''. Избавимся от отрицательного цикла, для этого пустим по нему максимально возможный поток. Величина потока равна минимальной остаточной пропускной способности в цикле. Перейдем к '''шагу 4'''.
 
* '''Шаг 6'''. Отрицательных циклов в остаточной сети нет, значит, максимальный поток минимальной стоимости найден.
 
* '''Конец.'''
 
  
====Асимптотика====
+
*[[Поиск_потока_минимальной_стоимости_методом_дополнения_вдоль_путей_минимальной_стоимости|Поиск потока минимальной стоимости методом дополнения вдоль путей минимальной стоимости]].
Алгоритм Форда-Беллмана работает за <tex>O(VE)</tex>, улучшение цикла за <tex>O(E)</tex>. Если обозначить максимальную стоимость потока как <tex>C</tex>, а максимальную пропускную способность как <tex>U</tex>, то алгоритм совершит <tex>O(ECU)</tex> итераций поиска цикла, если каждое улучшение цикла будет улучшать его на 1. В итоге имеем <tex>O(V E^2 C U + maxFlow)</tex>, где <tex>maxFlow</tex> - асимптотика поиска максимального потока.
+
*[[Использование_потенциалов_Джонсона_при_поиске_потока_минимальной_стоимости|Использование потенциалов Джонсона при поиске потока минимальной стоимости (модификация предыдущего алгоритма)]].
 
 
===Метод дополнения потока вдоль путей минимальной стоимости===
 
{{main|Поиск потока минимальной стоимости методом дополнения вдоль путей минимальной стоимости}}
 
 
 
===Использование потенциалов Джонсона===
 
{{main|Использование потенциалов Джонсона при поиске потока минимальной стоимости}}
 
  
 
== См. также ==
 
== См. также ==
* [[Сведение задачи о назначениях к задаче о потоке минимальной стоимости|Сведение задачи о назначениях к задаче о потоке минимальной стоимости]]
+
* [[Поиск потока минимальной стоимости методом дополнения вдоль путей минимальной стоимости|Поиск потока минимальной стоимости методом дополнения вдоль путей минимальной стоимости]]
* [[Венгерский алгоритм решения задачи о назначениях|Венгерский алгоритм решения задачи о назначениях]]
+
* [[Теорема Форда-Фалкерсона о потоке минимальной стоимости|Теорема Форда-Фалкерсона о потоке минимальной стоимости]]
 +
* [[Лемма об эквивалентности свойства потока быть минимальной стоимости и отсутствии отрицательных циклов в остаточной сети|Лемма об эквивалентности свойства потока быть минимальной стоимости и отсутствии отрицательных циклов в остаточной сети]]
  
 
== Источники информации ==
 
== Источники информации ==
*[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-е издание. Пер. с англ. {{---}} М.:Издательский дом "Вильямс", 2010. {{---}} 1296 с.: ил. {{---}} Парал. тит. англ. {{---}} ISBN 978-5-8459-0857-5 (рус.)
+
 
 +
== Литература ==
 +
* ''Кормен, Томас Х., Лейзерсон, Чарльз И., Ривест, Рональд Л., Штайн Клиффорд'' '''Алгоритмы: построение и анализ''', 2-е издание. Пер. с англ. М.:Издательский дом "Вильямс", 2010. 1296 с.: ил. Парал. тит. англ. ISBN 978-5-8459-0857-5 (рус.)
  
  
 
[[Категория:Алгоритмы и структуры данных]]
 
[[Категория:Алгоритмы и структуры данных]]
 
[[Категория: Задача о потоке минимальной стоимости]]
 
[[Категория: Задача о потоке минимальной стоимости]]

Пожалуйста, учтите, что любой ваш вклад в проект «Викиконспекты» может быть отредактирован или удалён другими участниками. Если вы не хотите, чтобы кто-либо изменял ваши тексты, не помещайте их сюда.
Вы также подтверждаете, что являетесь автором вносимых дополнений, или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого (см. Викиконспекты:Авторские права). НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ МАТЕРИАЛЫ!

Чтобы изменить эту страницу, пожалуйста, ответьте на приведённый ниже вопрос (подробнее):

Отменить | Справка по редактированию (в новом окне)