Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Баушев, Гадасина - Оптимизационные задачи на се...doc
Скачиваний:
2
Добавлен:
01.04.2025
Размер:
4.39 Mб
Скачать

§ 2. Задача о максимальном потоке

В этом параграфе рассмотрим задачу построения максимального потока в Т-сети, т. е. задачу

. (5.8)

Будем предполагать, что . Из следствия 5.2 вытекает, что в этом случае задача (5.8) имеет решение, причем . Оказывается, что на самом деле . Этот результат носит название теоремы Форда – Фалкерсона по имени авторов, впервые его доказавших.

Теорема 5.1. Если множество допустимых потоков для данной Т-сети не пусто, то величина максимального потока в этой сети равна минимальной из величин разрезов, отделяющих источник от стока.

Доказательство. Пусть – некоторый поток в Т-сети. Доказательство этой теоремы основано на следующем наблюдении, которое является основой для алгоритмов построения максимального потока в Т-сети.

Пусть – некоторый маршрут, т. е. (возможно) неориентированный путь от источника к стоку:

.

Пусть – множество прямых дуг маршрута , т. е. дуг, ориентированных от источника к стоку, – множество обратных дуг маршрута .

Предположим, что прямые дуги ненасыщенны сверху, т. е.

,

а обратные дуги ненасыщенны снизу, т. е.

.

Тогда поток можно увеличить на величину , прибавляя к значениям потока на прямых дугах и вычитая из значений потока на обратных дугах. При этом условие баланса для промежуточных узлов сохраняется, а величина потока в Т-сети увеличится на (рис. 5.1).

Рис. 5.1. Процедура увеличения потока.

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

Полагаем , .

Пока не выполнено условие перехода шага к шагу и пока это возможно, выполняем следующие шаги

Если существует дуга , такая, что , то в случае , переходим к шагу , в остальных случаях обновляем имеющийся разрез, полагая , .

Если существует дуга , такая, что , то полагаем , .

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

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

.■

Замечание 5.3. Если множество обратных дуг маршрута не пусто, то при осуществлении процедуры увеличения потока реальное перемещение объектов, образующих поток, вдоль маршрута невозможно. На самом деле в этом случае процедура одновременно выполняет две функции: 1) перераспределяет уже имеющийся поток так, чтобы образовались ориентированные пути, состоящие из ненасыщенных сверху дуг, и 2) посылает добавочный поток величины вдоль данных путей. В этом заключается нетривиальность процедуры в отличие от процедуры , описываемой далее.

Замечание 5.4. Величина , фигурирующая в описании процедуры , называется остаточной пропускной способностью маршрута .

Замечание 5.5. При ручном счете решение задачи удобно осуществлять в два этапа. На первом этапе осуществляется следующая процедура:

отыскиваются ориентированные пути от источника к стоку, состоящие из ненасыщенных сверху дуг, вычисляется величина , и значение прибавляется к значению потока на дугах, входящих в путь .

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

На рис. 5.2 представлена Т-сеть с заданным на ней полным, но не максимальным потоком. Значения потока на дугах – числа без рамочек. Насыщенные дуги перечеркнуты. Величина потока в сети равна .

Рис. 5.2. Т-сеть с заданным на ней полным, но не максимальным потоком.

В рассматриваемых далее примерах . В этом случае поток является допустимым потоком, он является начальным при реализации алгоритма построения максимального потока, описанного выше. Заметим, что ненасыщенность дуги снизу означает, что .

Пример 5.1. Построить максимальный поток и указать минимальный разрез для Т-сети, изображенной на рис. 5.2.

Решение задачи будем проводить в два этапа: сначала выполним процедуру , а затем проанализируем полученный полный поток на возможность применения процедуры .

Результаты вычислений первого этапа удобно свести в таблицу вида (табл. 5.1) .

Таблица 5.1 Построение полного потока для Т-сети.

Дуги

Поток вдоль пути

6

.

Строки таблицы за исключением последней соответствуют дугам Т-сети, а столбцы – путям от источника к стоку, состоящих из ненасыщенных дуг. В последней строке приведены вычисленные остаточные пропускные способности соответствующих путей, которые равны величине потока, посылаемого вдоль пути. На пересечении столбца, означающего путь, и дуги, входящей в этот путь, стоит остаточная пропускная способность дуги после посылаемого потока . Насыщение дуги отмечается звездочкой.

Из табл. 5.1 можно видеть, что первым был выбран путь . Поскольку поток к моменту выбора нулевой, имеем

.

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

.

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

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

Рис. 5.3. Граф остаточных пропускных способностей для Т-сети и потока, представленного на рис. 5.2.

Далее, анализируя имеющийся поток, пробуем дополнить граф остаточных пропускных способностей дугами, по которым течет положительный поток так, чтобы образовался маршрут, удовлетворяющий условиям применимости процедуры . В нашем случае замечаем, что по дуге течет поток величины 6, а по дуге течет поток величины 3. Следовательно, маршрут удовлетворяет условием применимости процедуры (рис. 5.4).

Рис.5.4. Маршрут, удовлетворяющий условиям применимости процедуры .

Для этого маршрута Прибавляя 3 к значениям потока на дугах и , и вычитая 3 из значений потока на дугах и , получаем поток величины 47, показанный на рис. 5.5.

Рис. 5.5. Максимальный поток для Т-сети на рис. 5.2. Кривая означает

минимальный разрез.

Дальнейший анализ показывает, что применение процедуры больше невозможно. Следовательно, имеющийся поток является максимальным. Нетрудно указать минимальный разрез. Заметим, что прямые дуги разреза должны быть насыщены, а поток на обратных дугах должен быть нулевым. Этому условию удовлетворяет разрез , где . Величина разреза равна .

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

,

то для времени работы алгоритма можно записать оценку:

.

В заключение параграфа рассмотрим кратко задачу построения потока минимальной величины в Т-сети.

Пусть – некоторый разрез Т-сети. Величина называется нижней пропускной способностью, или нижней величиной, разреза . Имеет место следующий факт.

Теорема 5.2. Если множество допустимых потоков для данной Т-сети не пусто, то величина минимального потока в этой сети равна максимальной из нижних величин разрезов, отделяющих источник от стока.

Доказательство этой теоремы вполне аналогично доказательству теоремы 5.1, поэтому мы его не приводим. Заметим только, что оно опирается на следующую модификацию процедуры .

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