DM.III.6n
.doc, называется взвешенным центром этого графа и т.д.
Примечание. При определении взвешенного графа мы ограничились весовыми функциями, принимающими неотрицательные действительные значения. В некоторых приложениях приходиться рассматривать весовые функции , , где , – произвольные множества. Наиболее часто встречаются взвешенные графы и орграфы , у которых .
§ 8. Экстремальные задачи
во взвешенных графах
Как отмечалось, наиболее часто областью приложений взвешенных графов являются дискретные экстремальные задачи. С помощью взвешенных графов исследуются не только различные сети коммуникаций, но и электрические схемы, структурные формулы химических соединений, сетевые графики и т.п. Алгоритмам решения подобных задач посвящена многочисленная учебная и научная литература. Поэтому ограничимся описанием алгоритмов решения наиболее типичных задач, важных для приложений.
1. Максимальный поток в сети. Понятия сети и потока в сети возникают в приложениях взвешенных графов к анализу систем транспортировки каких-либо продуктов (электроэнергии, нефтепродуктов, товаров и т.п.) из одного пункта в другой. Рассмотрим, например, систему трубопроводов, по которой перекачиваются нефтепродукты. Такую систему можно интерпретировать с помощью связного взвешенного графа, за вершины которого приняты узловые пункты системы, а за дуги – трубы между ними. Каждая труба имеет определенную пропускную способность, а величина потока в трубе не может превышать ее пропускной способности. Пусть нефть перекачивается из пункта в пункт . Естественно потребовать, чтобы при перекачке не было утечки нефтепродуктов, т.е. считать, что поток, входящий в любую вершину, отличную от и , равен потоку, исходящему из нее. Опираясь на эту интерпретацию, можно ввести следующие понятия.
Пусть – связный орграф. Полюсом орграфа называется вершина с нулевой степенью исхода либо с нулевой степенью захода. В транспортных системах полюсам соответствуют начальные и конечные пункты транспортировки продукта. Поэтому полюсы с нулевой степенью захода естественно называть источниками, а полюсы с нулевой степенью исхода – стоками.
Каждой дуге орграфа поставим в соответствие определенный вес ), т.е. положительное число, которое будем называть пропускной способностью этой дуги.
Полученный указанным образом взвешенный ориентированный связный граф с полюсами назовем сетью и будем обозначать .
Поскольку анализ сети более чем с двумя полюсами легко свести к анализу сети с двумя полюсами, рассмотрим только двухполюсные сети, в которых один из полюсов является источником, а другой – стоком. Для этих вершин , . Вершины сети, отличные от и , будем называть проходными или внутренними.
Потоком в сети называется функция , удовлетворяющая следующим требованиям (условия допустимости потока):
(1) для каждой дуги (величина потока через дугу не должна превышать ее пропускную способность);
(2) для всех вершин , отличных от источника и слива (закон сохранения потока). Здесь – множество всех дуг, входящих в вершину , а – множество всех дуг, исходящих из нее.
Число называется величиной потока, проходящего через вершину .
Теорема 3.8.1. Для любого фиксированного потока
.
Доказательство. Пусть – подмножество множества , содержащее источник , но не содержащее сток , а . Для любой проходной вершины согласно закону сохранения потока имеем . Поэтому, проведя суммирование по вершинам множества , получим
или
.
Включая в эти суммы поток через вершину , будем иметь
. (3.8.1)
Множество всех дуг, у которых начало лежит в , а конец – в , обозначим через , а множество всех дуг с началом в и концом в – через . Очевидно, что в том случае, когда начальная и конечная вершины дуги лежат в , слагаемое входит в обе суммы, стоящие в левой части равенства (3.8.1). Если в этой разности привести подобные члены, такие слагаемые взаимно уничтожатся, т.е.
.
Таким образом,
.
Возьмем в качестве множества множество , тогда , а – поток, вливающийся в . Так как для потока, вытекающего из , имеем , то
,
и, значит,
.
Итак, . ■
Величину называют величиной потока , будем обозначать ее .
Следствие. Пусть – подмножество множества , содержащее источник , но не содержащее сток , а . Тогда
.
С етью является ориентированный взвешенный граф на рис. 110. Первый элемент упорядоченной пары чисел, стоящей над каждой дугой, обозначает пропускную способность дуги, а второй – поток через нее. Например, для вершины имеем:
, ;
, .
Значит, величина потока через вершину равна 11. Так как
,
,
то величина самого потока равна 24.
Поток в сети называется максимальным, если для любого допустимого потока в этой сети.
Чтобы найти поток в сети , который при заданных значениях пропускных способностей дуг имеет максимальную величину, введем понятие сечения сети.
Сечением сети называется множество дуг, при удалении которых сеть становится несвязной, причем полюсы попадают в разные компоненты связности.
Очевидно, что каждый путь, выходящий из источника и входящий в слив , проходит хотя бы через одну дугу сечения.
Сечение называется простым, если при удалении любой его дуги оно перестает быть сечением.
Для сети на рис. 110 простым сечением будет, например, сечение .
В симметризации орграфа с множеством вершин и множеством дуг , которая, очевидно, будет связным графом, дуге соответствует ребро , а простому сечению – простой разрез.
Пусть – множество вершин той компоненты связности, в которой лежит источник , тогда , и
.
Если , т.е. направление дуги совпадает с направлением потока, то соответствующее ей ребро назовем прямым. Если дуга , соответствующее ей ребро назовем обратным.
Как было доказано, любой простой разрез разбивает граф ровно на две компоненты связности. Аналогичная теорема имеет место и для простых сечений.
Теорема 3.8.2. Если в сети удалить все дуги простого сечения , то сеть распадется ровно на две компоненты связности, одна из которых содержит источник , а вторая – сток .
Введем для простого сечения понятия пропускной способности и величины потока.
Пропускной способностью простого сечения называется число
.
Величиной потока в простом сечении называется разность .
Простое сечение (рис. 110) имеет пропускную способность
,
а величина потока через это сечение
.
Величина потока через сечение , дуга которого имеет направление, противоположное направлению потока, вычисляется так:
.
Простое сечение сети называется минимальным, если его пропускная способность не больше пропускной способности любого другого сечения этой сети: .
Теорема 3.8.3. Пусть – простое сечение сети , где – подмножество множества , содержащее , но не содержащее . Тогда
для любого потока .
Доказательство. Имеем
. ■
Следствие 1. Для некоторого потока и простого сечения сети равенство имеет место тогда и только тогда, когда для всех и для всех .
Следствие 2. Если для некоторого потока имеет место равенство , то – максимальный поток, а – минимальное сечение.
Докажем, что в любой сети можно создать поток максимальной величины.
Теорема 3.9.4 (Форд–Фалкерсон). Максимальный поток в сети такой, что
,
существует.
Доказательство. Приведем конструктивное доказательство сформулированной теоремы. Это позволит сразу указать алгоритм построения минимального сечения и определения соответствующего максимального потока.
Пусть в сети с источником и стоком задан некоторый допустимый поток . Построим с помощью него простое сечение сети, используя следующие процедуры.
Шаг 1. Положим .
Шаг 2. Если в существует вершина такая, что или для некоторой вершины , то включить в . Повторять шаг 2 до тех пор, пока это возможно.
В результате придем к одному из следующих случаев: 1) , 2) . Рассмотрим эти случаи.
Случай 1. Если , то в соответствии с шагом 2 для всех дуг будет иметь место равенство , а для всех дуг выполняться равенство . Поэтому в силу следствия 1 предыдущей теоремы поток будет максимальным, а построенное сечение – минимальным.
Случай 2. Если , то в симметризации , полученной в результате стирания ориентации дуг орграфа , существует цепь, соединяющая с и удовлетворяющая свойствам:
для каждого прямого ребра ,
для каждого обратного ребра .
Такую ()-цепь называют аугментальной (увеличивающей).
Для прямых ребер аугментальной цепи вычислим величину
,
а для обратных ребер – величину
.
Найдем . Прибавим к значениям потока на всех прямых ребрах аугментальной цепи, и вычтем из значений потока на всех обратных ребрах. В результате получим новый допустимый поток , величина которого на больше, чем величина исходного потока .
С помощью шагов 1, 2 аналогичным образом для потока найдем новое сечение сети и произведем следующее увеличение величины потока в сети и т.д. Поскольку пропускные способности дуг – конечные величины, а общая величина потока увеличивается, наступит момент, когда дальнейшее наращивание потока станет невозможным, т.е. . А это означает, что будет найден максимальный поток и построено соответствующее ему минимальное сечение. ■
Следствие 1. Если величина потока в сети равна сумме пропускных способностей дуг, выходящих из источника, то этот поток является максимальным.
Следствие 2. Если величина потока в сети равна сумме пропускных способностей дуг, входящих в сток, то этот поток максимальный.
Вытекающий из приведенного доказательства алгоритм поиска максимального потока в сети и соответствующего ему минимального сечения (в той или иной его модификации) называют алгоритмом Форда–Фалкерсона.
В основе названного алгоритма лежит последовательное увеличение потока в сети с помощью построения аугментальных цепей от к . Алгоритм «запускают» с произвольного допустимого потока (обычно, нулевого). Вершинам орграфа присваиваются метки, показывающие, вдоль каких дуг и на сколько может быть увеличен поток. Затем выбирают некоторую аугментальную цепь, поток через дуги этой цепи увеличивают до максимально допустимой величины, а после этого все метки в вершинах стирают. Вновь полученный поток выбирается в качестве исходного для следующего шага. Процесс продолжается до тех пор, пока такие потоки можно построить.
Уточним, как помечаются вершины. Пусть – вершина сети. Если поток вдоль дуги может быть увеличен, то вершине припишем метку , если же поток может быть уменьшен, – метку ; – величина дополнительного потока, который может проходить от к .
Рассмотрим действие алгоритма на конкретном примере.
Задача 8.1. Найти максимальный поток и соответствующее ему минимальное сечение для сети на рис. 110.
Решение.
1 . Возьмем нулевой поток в качестве исходного (рис. 111); вершине присвоим метку .
2. Присвоим метки вершинам , и , смежным с вершиной . Вершина при этом получит метку , вершина – метку , а вершина – метку .