14. Сети и потоки в сетях. Стационарные потоки. Алгоритм Форда-Фалкерсона поиска максимального стационарного потока

Пусть - некоторый орграф и вещественно-значная функция на множестве ребер; тогда пара называется Сетью, а функция в контексте сети называ-ется Функцией пропускной способности или Пропускной способностью сети.

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

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

Поток в сети называется Стационарным, если существуют две вершины и число такие, что выполнены следующие условия:

В этой ситуации число Называется Величиной потока , вершина называется Источни-

Ком, а вершина - Стоком потока .

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

Шаг 0. Фиксируем на данной сети с источником и стоком произвольный стационарный поток , например - поток, тождественно равный нулю (т. е. равный нулю на каждом ребре данного орграфа ). Нетрудно проверить, что такой поток действитель-но стационарный и имеет величину 0.

Шаг 1. Около вершины поставим пометку следующего вида:

.

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

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

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

Шаг 2. Пусть - некоторое ребро, начало которого, т. е. вершина , уже имеет некоторую пометку (или, если - это источник , то пометку , где ). Если , т. е. поток равен на ребере пропускной способности , то пометка у вершины Не проставляется. Если же , то пометка у вершины выставляется следующим образом.

На первом месте в пометке будет стоять символ , т. е. пометка будет такой: , где число Еще нужно найти. Положим

.

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

.

Процедура расстановки пометок в соответствии с Шагом 2 проводится до тех пор, пока не окажется помеченной вершина , или до тех пор, пока не выяснится, что вершину поме-тить невозможно. Можно доказать, что в последнем случае поток , с помощью которого проводился весь Шаг 2, Имеет максимальную возможную величину, и задача решена.

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

Шаг 3. Пусть вершина имеет пометку . Мы изменим сейчас поток на не-скольких ребрах данного графа, в результате чего получится новый стационарный поток из источника в сток , величина которого будет на (это число указано в пометке стока ) больше величины потока .

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

Затем перейдем к вершине и проделаем то же, что только что делалось относительно вершины ; при этом прибавлять или вычитать будем прежнее число . Продолжая так, в со-ответствии с пометками, отбирать ребра графа и менять на них значение потока (на каждом от-бираемом ребре - на одно и то же число !), мы придем к источнику . Это будет означать завершение изменения потока. Можно доказать, что Полученный в результате поток является стационарным и его величина на больше величины исходного потока .

Затем нужно повторить все сначала с уже новым базовым стационарным потоком.

Пример. Найти максимальный стационарный поток из в в следующей сети (числа у стрелок означают пропускную способность):

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

Возникла возможность поток увеличить на 1. Для этого на ребре положим его рав-ным 1 (а не нулю, как это было для исходного потока), также равным 1 новый поток будет и на ребрах и . На остальных ребрах поток остается равным нулю.

Новый поток имеет величину 1, он стационарен с источником и стоком . Повторим теперь процедуру сначала, стремясь поставить пометку к стоку .

Вершину пометим пометкой . Далее пометим вершину ; соответствующая пометка: . Далее пометим вершину ; соответствующая пометка: . Теперь поме-тим вершину ; соответствующая пометка: . Теперь снова увеличим на 1 значения по-тока на ребрах . Новый поток будет тоже стационарен, но уже величины 2.

Вновь поставим пометку у вершины и попытаемся увеличить имеющийся стационарный поток величины 2.

Пометим вершину ; соответствующая пометка: . Далее пометим вершину ; соответствующая пометка: . Далее поме-тим вершину ; соответствующая пометка: . Вновь изменим поток на 1: прибавим 1 к значениям прежнего потока на ребрах ,

. Вновь полученный поток имеет величину 3.

Дальнейшие попытки достигнуть пометками вершину не имеют успеха. Следова-тельно, максимальный стационарный поток найден.

© 2011-2024 Контрольные работы по математике и другим предметам!