Скажите, пожалуйста, можно ли еще получить документ о прохождении курса ("Графы и алгоритмы", декабрь 2020) после предоставления всех дополнительных необходимых документов? |
Потоки
Метод увеличивающих путей
При внимательном рассмотрении рисунка 16.1 можно обнаружить, что
представленный на нем поток не является максимальным, так как существует
ориентированный путь , на каждом ребре которого поток
можно
увеличить на 1. Иногда поток можно увеличить и при отсутствии таких
"недогруженных" путей из источника в сток. Рассмотрим пример сети
и потока
на рис. 16.2 слева. Среди ребер,
выходящих
из источника, только на ребре
можно было бы увеличить
поток на 1. Но тогда нарушится условие сохранения потока в вершине
, а дальше эту дополнительную единицу
потока передать нельзя, так как ребро
полностью загружено.
Можно, однако, заметить, что в вершину
входит еще
ребро
с положительным потоком на нем. Если одновременно увеличить поток на
ребре
и уменьшить на ребре
на 1, то
условие сохранения
в вершине
останется выполненным. Но теперь будет нарушено
условие
сохранения в вершине
. Это легко исправить, уменьшив на 1 поток
на ребре
. В результате возникает нарушение в вершине
, но
и оно будет устранено, если мы увеличим на 1 поток на
ребре
. После
этого условие сохранения будет выполнено во всех внутренних вершинах,
а величина потока увеличится на 1. Новый поток показан на рисунке 16.2.
В этом примере, как и в предыдущем, удалось найти
путь
(выделен на рисунке), вдоль которого можно направить дополнительный поток.
Отличие в том, что этот путь не ориентированный - при движении вдоль него
от источника к стоку некоторые ребра проходятся в направлении ориентации
(прямые), другие против ориентации (обратные). При этом все прямые ребра
пути недогружены, то есть поток на каждом из них не достигает пропускной
способности, а на каждом из обратных ребер имеется положительный поток.
Благодаря этому можно увеличить поток на всех прямых ребрах пути
и уменьшить на всех обратных на одну и ту же величину. В результате условие
сохранения потока во внутренних вершинах по-прежнему выполняется,
а величина потока увеличивается.
Приведенный пример иллюстрирует общий метод, на котором основаны многие алгоритмы решения задачи о максимальном потоке - метод увеличивающих путей. Он является обобщением метода увеличивающих путей для задачи о паросочетании. Введем необходимые понятия и докажем теорему, обосновывающую этот метод.
Допустим, имеется сеть и в ней поток
. Пусть
-
неориентированный
путь в сети. Ребро
назовем прямым ребром этого пути, если
, и обратным, если
.
Путь назовем подходящим
относительно потока
,
если для каждого прямого ребра f(ei)< c(ei), а для каждого
обратного
. Таким образом, на каждом прямом ребре
подходящего пути поток можно увеличить, а на каждом обратном - уменьшить. Увеличивающий путь - это подходящий путь из источника
в сток.
Лемма 3. Если относительно потока имеется
увеличивающий путь, то этот поток не максимален.
Доказательство. Пусть - увеличивающий путь для потока
,
- множество всех
прямых,
- множество всех обратных ребер этого пути.
Положим,

Тогда на каждом прямом ребре пути можно увеличить поток на величину , а на каждом обратном - уменьшить на величину
. Возьмем
и определим на ребрах сети новую функцию :

Легко видеть, что условия (1) и (2) для функции выполняются,
так
что эта функция является потоком. Вместе с тем, очевидно,
, причем
.