Нижегородский государственный университет им. Н.И.Лобачевского
Опубликован: 27.09.2006 | Доступ: свободный | Студентов: 3534 / 125 | Оценка: 4.44 / 4.11 | Длительность: 13:45:00
Специальности: Программист, Математик
Лекция 16:

Потоки

< Лекция 15 || Лекция 16: 1234

Теорема 1. Поток максимален тогда и только тогда, когда относительно него нет увеличивающего пути. Максимальная величина потока равна минимальной пропускной способности разреза данной сети.

Доказательство. Если поток максимален, то из леммы 3 следует, что увеличивающего пути нет. Обратно, пусть f - поток, относительно которого нет увеличивающего пути. Покажем, что этот поток максимален. Для этого рассмотрим множество X, состоящее из всех вершин сети, достижимых подходящими путями из вершины s, \overline{X}=V-X. Так как увеличивающих путей нет, то t\in \overline{X}, так что (X,\overline{X}) - разрез. Пусть e=(x,y) - ребро этого разреза. Вершина x достижима из s подходящим путем, а вершина y недостижима. Тогда f(e)=c(e), так как иначе к подходящему пути, ведущему из s в x, можно было бы добавить ребро e и вершину y, и получился бы подходящий путь из s в y. Итак, на каждом ребре разреза (X,\overline{X}) поток равен пропускной способности, следовательно, f(X)=c(X). Аналогично, рассматривая ребра из множества (\overline{X},X), убеждаемся, что поток на каждом таком ребре равен 0, в противном случае опять можно было бы продолжить некоторый подходящий путь до вершины из \overline{X}. Следовательно, f(\overline{X})=0. Применяя лемму 1, получаем

M(f)=f(X)-f(\bar{X})=c(X).

По лемме 2, величина любого потока не превосходит пропускной способности любого разреза. Значит, f - максимальный поток, а (X,\overline{X}) - разрез с минимальной пропускной способностью.

Многие известные алгоритмы построения максимального потока основаны на этой теореме и различаются, в частности, стратегией поиска увеличивающих путей. Первый алгоритм, для которого была получена верхняя оценка трудоемкости, предложили Эдмондс и Карп в 1972 г. В этом алгоритме всегда ищется кратчайший (по числу ребер) увеличивающий путь. Удобно этот поиск вести не на исходной сети N, а на остаточной сети R, которая при заданном на сети N потоке f определяется следующим образом. Множество вершин, источник и сток у остаточной сети те же, что у исходной. Пусть e - ребро исходной сети. Тогда

  1. если f(e)< c(e), то ребро e включается в сеть R и ему в этой сети присваивается пропускная способность c'(e)=c(e)-f(e) ;
  2. если f(e)>0, то к сети R добавляется ребро противоположного направления \bar{e} с пропускной способностью c'(\bar{e})=f(e).

Легко видеть, что увеличивающие пути в исходной сети находятся во взаимно однозначном соответствии с ориентированными путями из источника в сток в остаточной сети. В алгоритме Эдмондса--Карпа нужно в остаточной сети искать кратчайший ориентированный путь из s в t. Это можно сделать за линейное время с помощью поиска в ширину. Если увеличивающий путь обнаружен, поток увеличивается, как описано в доказательстве леммы 3, для нового потока строится остаточная сеть и т.д., пока не будет построен поток, относительно которого нет увеличивающего пути (в остаточной сети нет ориентированного пути из источника в сток. Общая оценка трудоемкости алгоритма Эдмондса--Карпа O(m^{2} n). В настоящее время известны и более быстрые алгоритмы для задачи о максимальном потоке.

< Лекция 15 || Лекция 16: 1234
Петр Петров
Петр Петров

произведение графов К(2)*О(4) фактически 4 отдельных графа К(2)?

Александр Лаврентьев
Александр Лаврентьев

много инструкций вида if - then - else

Например Procedure DFS(a) опишите каким образом следует понимать вложенность инструкций. Как в языке С ? 

т.е. следующее 

if (...) then (...)

if (...) then (...)

else(...)

 

раскрывается как 

if (...) then (...)

if (...) then (...)

         else(...)

или так :

if (...) then

 {  (...)

     if (...) then (...)

              else(...)

}

обьясните пожалуйста.

 

 

Дмитрий Крюков
Дмитрий Крюков
Россия, Москва
Андрей Посохов
Андрей Посохов
Россия, Санкт-Петербург