
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.
Присвоим метки вершинам
,
и
,
смежным с вершиной
.
Вершина
при этом получит метку
,
вершина
– метку
,
а вершина
– метку
.