Поток минимальной стоимости — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
(Алгоритм)
(Свойства стоимости)
Строка 10: Строка 10:
 
* Поток из <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>
  

Версия 14:42, 24 января 2016

Задача о потоке минимальной стоимости

Определение:
Пусть дана сеть [math]G(V,E)[/math]. [math]S, T \in V[/math] — источник и сток. [math]\forall (u,v) \in E[/math] [math]\exists c(u, v), f(u,v)[/math] — стоимость пересылки единицы потока и пропускная способность. Тогда общая стоимость потока из [math]S[/math] в [math]T[/math]:
[math]p(u,v) = \sum\limits_{u,v \in V, f(u,v)\gt 0} c(u,v) \cdot f(u,v)[/math]

Свойства стоимости

  • Поток не может превысить пропускную способность.
[math]f(u,v) \leqslant c(u,v)[/math]
  • Поток из [math]u[/math] в [math]v[/math] должен быть противоположным потоку из [math]v[/math] в [math]u[/math].
[math]f(u, v)=-f(v, u)[/math]
  • Сохранение потока. Для каждой вершины, сумма входящего и исходящего потоков равно [math]0[/math].
[math] \sum\limits_{w \in V} f(u,w) = 0[/math]


Задача:
Дана сеть [math]G(V,E)[/math]. [math]S, T \in V[/math] — источник и сток. [math]\forall (u,v) \in E[/math] [math]\exists c(u, v), f(u,v)[/math] — стоимость пересылки единицы потока и пропускная способность. Требуется найти максимальный поток, суммарная стоимость которого минимальна.


Алгоритмы решения

Метод устранения отрицательных циклов в остаточной сети

Воспользуемся леммой об эквивалентности свойства потока быть минимальной стоимости и отсутствии отрицательных циклов в остаточной сети. Получим следующий алгоритм:

Алгоритм

  • Начало.
  • Шаг 1. Требуется найти максимальный поток минимальной стоимости.
  • Шаг 2. Для каждого ребра зададим поток равный [math]0[/math].
  • Шаг 3. Построим остаточную сеть [math]G_f[/math].
  • Шаг 4. При помощи алгоритма Форда-Беллмана найдем отрицательные циклы в остаточной сети. Если нет - перейдем к шагу 7.
  • Шаг 5. Выберем один из отрицательных циклов.
  • Шаг 6. Избавимся от отрицательного цикла, для этого пустим по нему максимально возможный поток. Перейдем к шагу 5.
  • Шаг 7. Отрицательных циклов восточной сети нет, значит, максимальный поток минимальной стоимости найден.
  • Конец.

Ассимптотика

Алгоритм Форда-Беллмана работает за [math]O(VE)[/math]. Нахождение максимального потока и улучшение цикла работает за [math]O(E)[/math]. В итоге имеем [math]O(V E^2)[/math].

Метод дополнения потока вдоль путей минимальной стоимости

Поиск потока минимальной стоимости методом дополнения вдоль путей минимальной стоимости.

Использование потенциалов Джонсона

Использование потенциалов Джонсона при поиске потока минимальной стоимости (модификация предыдущего алгоритма).

См. также

Источники информации