Литература / Олейник.Лекции по дискретной математике / вариант .doc / Глава 3 / параграф 3.17
.doc3.17. Задача о максимальном потоке
В этом параграфе будут рассматриваться сети , имеющие единственную вершину с нулевой полустепенью захода и единственную вершину с нулевой полустепенью исхода. Вершину будем называть источником, а вершину - стоком сети . Вес дуги будем называть пропускной способностью этой дуги.
Для удобства изложения введем следующие обозначения. Через обозначим множество дуг, для которых вершина является началом, а через обозначим множество дуг, для которых вершина является концом.
Определение. Потоком в сети называется функция , удовлетворяющая условиям:
1. ;
2. для всех вершин , , , где и .
Значение можно интерпретировать как поток, втекающий в вершину , а значение - как поток, вытекающий из вершины . Тогда второе условие можно переформулировать так: поток, втекающий в любую вершину, за исключением источника и стока, должен быть равен вытекающему из этой вершины потоку.
Условие 1) называется условием ограничения по пропускной способности, а условие 2) – условием сохранения потока в вершинах.
Пример 1. На рисунке дан пример сети и потока в ней. Пропускная способность дуги указана около соответствующей дуги, там же через запятую указано значение .
Определение. Положим . Число называется величиной потока.
Определение. Поток называется максимальным, если для любого потока справедливо неравенство .
Задача о максимальном потоке состоит в следующем: в заданной сети найти поток максимальной величины.
Задача о максимальном потоке имеет одну особенность, отличающую ее от рассмотренных нами ранее задач дискретной оптимизации. В предшествующих задачах искомый объект существовал очевидным образом и в принципе мог быть найден полным перебором. Например, можно было перебрать все остовы и выбрать среди них минимальный или перебрать все пути между заданными вершинами и выбрать среди них кратчайший. В задаче о максимальном потоке полный перебор принципиально невозможен и существование максимального потока не является очевидным. Тем не менее, справедлива следующая теорема, которую мы приведем без доказательства.
Теорема. В каждой сети существует максимальный поток.
Определение. Цепью из вершины в вершину на сети называется последовательность попарно различных вершин и дуг
,
(здесь ), в которой любые два соседних элемента инцидентны.
Если при этом дуга выходит из вершины и заходит в вершину , то она называется прямой дугой цепи. Если же дуга выходит из вершины и заходит в вершину , то она называется обратной дугой цепи.
Пусть - поток в сети и - цепь из в . Для каждой дуги цепи положим
и
.
Определение. Цепь из в называется - дополняющей, если .
Пример 2. В сети, изображенной на рисунке 1, цепь, включающая последовательно вершины , является - дополняющей для потока, рассмотренного в примере 1.
Одним из алгоритмов, позволяющих построить максимальный поток, является алгоритм Форда-Фалкерсона.
Алгоритм Форда –Фалкерсона. 0-ой шаг. Положим для всех дуг .
-ый шаг. Пусть к началу шага по цепи течет поток . Для текущего потока ищется -дополняющая -цепь.
Если такой цепи нет, то максимальный поток найден: это .
В противном случае, если такая -дополняющая -цепь имеется, ей дается имя и по следующему правилу строится поток :
Величина этого потока определяется равенством
.
Замечание. Возникает существенный вопрос: закончится ли работа алгоритма за конечное число шагов? Оказывается, гарантии этому нет. Гарантировать построение максимального потока можно в случае, если на каждом шаге производить увеличение потока вдоль кратчайших по числу дуг -дополняющих цепей.
Пример 3. Построим максимальный поток для сети из примера 1.
Шаг 0. ;
поток указан на рис. 1;
.
Шаг 1. ,
,
поток указан на рис. 2;
.
Шаг 2. ,
,
поток указан на рис. 3;
.
Шаг 3. ,
,
поток указан на рис. 4;
.
Шаг 4. ,
,
поток указан на рис. 5;
.
Для цепи, изображенной на рисунке 5 , -дополняющих цепей из в нет. Следовательно, поток является максимальным потоком.
Обоснование алгоритма Форда-Фалкерсона
Предварительно введем ряд понятий и докажем ряд утверждений.
Определение. Разрезом в сети называется пара множеств и , удовлетворяющих условиям:
1. , ;
2. ;
3. .
Через обозначим множество всех дуг, начала которых лежат в , а концы – в , а через - множество всех дуг, начала которых лежат в , а концы – в .
Определение. Положим . Число называется пропускной способность разреза .
Также для разреза введем числовые характеристики:
,
.
Пример 4. Для сети и потока в ней из примера 1, рассмотрим разрез , где и . Имеем: , , .
Лемма 1. Для любого потока и любого разреза справедливо равенство .
Доказательство. Согласно условию сохранения потока в вершинах для произвольной вершины имеем: , или . Следовательно,
. (1)
Кроме того
. (2)
Сложив почленно равенства (1) и (2), получим
,
,
,
.
Первое и третье слагаемые последнего равенства взаимно уничтожаются, следовательно,
,
. ■
Следствие 1. .
Доказательство. Пусть , . Тогда , и равенство из леммы 1 запишется следующим образом: . ■
Следствие 2. Для любого потока и любого разреза справедливо неравенство .
Доказательство. Из условия ограничения по пропускной способности , т.е.
.
Тогда с учетом равенства из леммы 1 имеем:
■
Определение. Разрез называется минимальным, если для любого разреза справедливо неравенство
.
Лемма 2. Если для некоторого потока и некоторого разреза выполняется равенство , то поток максимален, а разрез минимален.
Доказательство. Пусть - максимальный поток, а - минимальный разрез. Тогда справедлива следующая цепочка неравенств
.
Поскольку крайние члены в этой цепочке неравенств совпадают, то она превращается в цепочку равенств, что означает, что поток максимален, а разрез минимален. ■
Лемма 3. Пусть - поток в сети и – -дополняющая цепь из в . Тогда в сети существует поток такой, что
.
Доказательство. Определим в сети функцию по формуле
Докажем, что функция является потоком.
Вначале покажем, что функция неотрицательна и удовлетворяет условию 1) определения потока.
Пусть - прямая дуга цепи . Тогда
.
Пусть - обратная дуга цепи . Тогда
и
.
Таким образом, для любой дуги цепи выполнено . Если , то .
Теперь убедимся в выполнении для функции условия 2) определения потока. Понятно, что это условие следует проверить лишь для вершин , входящих в цепь . Пусть - дуга, по которой «пришли» в вершину , а - дуга, по которой «ушли» из . Каждая из этих дуг может быть как прямой, так и обратной в цепи . Следовательно, возможны четыре различных случая.
1. Пусть обе дуги и прямые. В этом случае,
и ,
так что
и .
Но для потока выполнено условие , следовательно, и для потока имеем .
2. Пусть дуга - прямая и - обратная, т.е. обе дуги входят в вершину . В этом случае,
и ,
так что
и .
Так как для потока выполнено условие , то и для потока имеем .
Аналогично рассматриваются случай 3 (обе дуги и - обратные) и случай 4 (дуга - обратная и - прямая).
Таким образом, мы показали, что функция - поток в цепи .
Определим теперь величину потока . Напомним, что . Из вершины дуги только выходят, поэтому та единственная дуга с началом в вершине , которая входит в цепь , является прямой дугой цепи . Следовательно, для нее выполнено равенство . На остальных дугах, выходящих из , поток не менялся, так что имеем:
. ■
Объединяет приведенные выше результаты следующая теорема.
Теорема (Форд, Флакерсон). Для потока в сети следующие условия эквивалентны:
-
поток максимален;
-
не существует - дополняющей цепи из в ;
-
существует разрез , для которого .
Доказательство. Доказательство проведем по следующей схеме: .
. Будем рассуждать от противного. Предположим, что для максимального потока найдется -дополняющая цепь из в . Тогда по лемме 3 существует поток такой, что , т.е. . Полученное неравенство противоречит тому, что поток максимален.