8.5.4. Алгоритм нахождения максимального потока
Следующий алгоритм определяет максимальный поток в сети, заданной матрицей пропускных способностей дуг. Этот алгоритм использует ту же идею доказательства теоремы Форда и Фалкерсона, а именно, задавшись начальным приближением потока, определяется множество вершин S, которые соединены аугмен-тальными цепями с источником s. Если оказывается, что t e S, то это означает, что поток не максимальный и его можно увеличить на величину 8. Для определения аугментальных цепей и одновременного подсчета величины 8 в алгоритме использована вспомогательная структура данных:
Р • array [l..p] of record
s : enum (—,+) { «знак», то есть направление дуги }
п : 1..р { предшествующая вершина в аугментальной цепи }
S : real { величина возможного увеличения потока } end record
Алгоритм 8.1. Нахождение максимального потока
Вход: сеть G(V, Е) с источником s и стоком t, заданная матрица пропускных способностей С : array [l..p, l..p] of real.
Выход: матрица максимального потока F : array [l..p, l..p] of real, for u, v € V do
p[Uj v]: = 0{ вначале поток нулевой } end for
M : { итерация увеличения потока } for v е V do
S{v] : = Q;N[v}: = 0;P[v] :=(,,) { инициализация } end for
S[s]: = 1; P[s]: =(+, s, oo){ так как s € S } repeat
a: = 0{ признак расширения 5 } for и е У do
if SM = l&N[v] =0then for u e I» do
if S[u] = 0&F[v,u} < C[v,u] then
S[u]: = 1; P[u]: =(+, v, mm(P[v}.5, C[v, u] - F[v, u])); a : = 1 end if end for forueT-1^) do
if 5[и] =OkF[u,v] >0then
S[u]: = 1; P[u]: =(-,v, mm(P[v].S, F[u, v})); a: = 1 end if end for N[v]: = 1 end if end for if S[t] then
x:'=i;5:*=P[ti.S while x ^ s do if P[x].s=* + then
F[P[x}'.n,x]: = F[P[x].n, x}+6 else
F[x,P[x].n}: = F[x,P(x].n}-5 end if x: = P[x].n end while goto M end if until a = 0
обоснование
В качестве первого приближения берется нулевой поток, который по опре, нию является допустимым. В основном цикле, помеченном меткой М, дел ся попытка увеличить поток. Для этого в цикле repeat расширяется, пока э возможно, множество S вершин, достижимых из вершины s по аугментальнь цепям. При этом, если в множество 5 попадает вершина t, то поток вдоль най денной аугментальной цепи (s,t) немедленно увеличивается на величину 6, и начинается новая итерация с целью увеличить поток. Процесс расширения мно жества S в цикле repeat заканчивается, потому что множество вершин конечно, а отмеченные в массиве N вершины повторно не рассматриваются. Если про цесс расширения множества S заканчивается и при этом вершина t не попадает в множество S, то по теореме Форда и Фалкерсона найденный поток F является максимальным и работа алгоритма завершается. П
ЗАМЕЧАНИЕ
Приведенный алгоритм не является самым эффективным. Более подробное изложение известных методов можно найти, например, в [14J или в [11].
Связь между теоремой Менгера и теоремой Форда и Фалкерсона
Теорема Менгера является фундаментальным результатом, который проявляется в различных формах (см., например, задачи 8.4.1, 8.4.2, 8.4.3). Теорема Форда и Фалкерсона также может быть получена из теоремы Менгера. Далее приведена схема неконструктивного доказательства теоремы Форда и Фалкерсона на основе теоремы Менгера. Сначала нужно получить вариант теоремы Менгера в ориентированной реберной форме: наибольшее число (s,t)-путей, непересекающихся по дугам, равно наименьшему числу дуг в (s, £)-разрезе. Это теорема Форда и Фалкерсона в том случае, когда Ve е Е С(е) = 1. Действительно, пусть Q -множество дуг из максимального набора непересекающихся (s,t)-путей. Назначим f(e): = 1, если е е Q, и f(e): = 0, если е £ Q. Это поток, так как дивергенция в любой вершине равна 0 и поток через дугу не превосходит пропускной способности. Величина этого потока равна k ^ d+(s), где k — число дуг, выходящих из s, которые начинают пути из Q. Этот поток максимальный. Действительно, если положить f(e]: = о > 0 для е & Q, то
1. если дуга е входит в вершину, входящую в пути из Q, или выходит из такой вершины, то нарушается условие потока (дивергенция -а или +а, соответ ственно);
2. если вновь назначенные дуги с ненулевыми потоками образуют новый (s,t)- путь, то это противоречит выбору Q.
Пусть теперь пропускные способности суть натуральные числа. Тогда можно провести аналогичные рассуждения для мультиграфов, считая, что вместо одной ду-и с пропускной способностью п имеется п дуг с пропускной способностью 1. Если пропускные способности — рациональные числа, то их можно привести к общему знаменателю и свести задачу к предыдущему случаю.
Для вещественных пропускных способностей заключение теоремы можно получить путем перехода к пределу в условиях предыдущего случая.
ОТСТУПЛЕНИЕ -
Приведенное в разделе 8.5.3 доказательство теоремы Форда и Фалкерсона конструктивно, из него не только следует заключение о величине максимального потока, но и извлекается способ нахождения максимального потока.
Связность в орграфах
Связность является одним из немногих понятий, которые не распространяются непосредственно с графов на другие родственные объекты и требуют отдельного определения и рассмотрения.
Сильная, односторонняя и слабая связность
В неориентированном графе две вершины либо связаны (если существует соединяющая их цепь), либо не связаны. В ориентированном графе отношение связанности вершин несимметрично, а потому определение связности отличается.
Пусть G(V, Е} — орграф, vi и v2 — его вершины. Говорят, что две вершины v\ и V2 сильно связаны в орграфе G, если существует путь (ориентированная цепь) из v\ в г>2 и из V2 в vi. Говорят, что две вершины v\ и v2 односторонне связаны в орграфе G, если существует путь либо из v: в v2, либо из v2 в v\. Говорят, что две вершины v\ и v2 слабо связаны в орграфе G, если они связаны в графе G', полученном из G отменой ориентации ребер. Если все вершины в орграфе сильно (односторонне, слабо) связаны, то орграф называется сильно (односторонне, слабо) связным. Сильная связность влечет одностороннюю связность, которая влечет слабую связность. Обратное неверно.
Пример на рис. 8.6. показаны диаграммы сильно, одностороннее и слабо связанных орграфов.
рис. 8.6.Сильная (слева), односторонняя (в центре) и слабая (справа) связность
. Компоненты сильной связности
Компоненты сильной связности (КСС) орграфа G — это его максимальные сильно связные подграфы.
Каждая вершина орграфа принадлежит только одной КСС. Если вершина не связана с другими, то считаем, что она сама образует КСС. Конденсацией G* орграфа G (или графом Герца, или фактор-графом) называется орграф, который получается стягиванием в одну вершину каждой КСС орграфа G.
Пример
На рис. 8.7 показаны диаграммы орграфа и его конденсации.
Рис. 8.7. Оргаф (слева) и его фактор-граф (справа)
- Иркутский государственный технический университет
- 1. Определения графов
- 7.4.5. Массив дуг
- 8.4.2. Трансверсаль
- 8.5.4. Алгоритм нахождения максимального потока
- 8.6.3. Выделение компонент сильной связности
- 8.7.1. Длина дуг
- 8.7.2. Алгоритм Флойда
- 8.7.3. Алгоритм Дейкстры
- Глава 9 Деревья
- 9.1. Свободные деревья
- 9.1.1. Определения
- 9.1 .2. Основные свойства деревьев
- 9.2. Ориентированные, упорядоченные и бинарные деревья
- 9.2.1. Ориентированные деревья
- 9.2.2. Эквивалентное определение ордерева
- 9.2.3. Упорядоченные деревья
- 9.2.4. Бинарные деревья
- 9.3. Представление деревьев в эвм
- 9.3.1. Представление свободных, ориентированных и упорядоченных деревьев
- 9.3.2. Представление бинарных деревьев
- 9.3.3. Обходы бинарных деревьев
- 9.3.4. Алгоритм симметричного обхода бинарного дерева
- 9.4. Деревья сортировки
- 9.4.1. Ассоциативная память
- 9.4.2. Способы реализации ассоциативной памяти
- 9.4.3. Алгоритм бинарного (двоичного) поиска
- 9.4.4. Алгоритм поиска в дереве сортировки
- 9.4.5. Алгоритм вставки в дерево сортировки
- 9.4.6. Алгоритм удаления из дерева сортировки
- 9.4.7. Вспомогательные алгоритмы для дерева сортировки
- 9.4.8. Сравнение представлений ассоциативной памяти
- 9.4.9. Выровненные деревья
- 9.4.10. Сбалансированные деревья
- 9.5. Кратчайший остов
- 9.5.1. Определения
- 9.5.2. Схема алгоритма построения кратчайшего остова
- 9.5.3. Алгоритм Краскала
- Глава 10 Циклы
- 10.1. Фундаментальные циклы и разрезы
- 10.1.1. Циклы и коциклы
- 10.1.2. Независимые множества циклов и коциклов
- 10.1.3. Циклический и коциклический ранг
- 10.2. Эйлеровы циклы
- 10.2.1. Эйлеровы графы
- 10.2.2. Алгоритм построения эйлерова цикла в эйлеровом графе
- 10.2.3. Оценка числа эйлеровых графов
- 10.3. Гамильтоновы циклы
- 10.3.1. Гамильтоновы графы
- 10.3.2. Задача коммивояжера
- Глава 11 Независимость и покрытия
- 11.1. Независимые и покрывающие множества
- 11.1.1. Покрывающие множества вершин и ребер
- 11.1.2. Независимые множества вершин и ребер
- 11.1.3. Связь чисел независимости и покрытий
- 11.2. Построение независимых множеств вершин
- 11.2.1. Постановка задачи отыскания наибольшего независимого множества вершин
- 11.2.2. Поиск с возвратами
- 11.2.3. Улучшенный перебор
- 11.2.4. Алгоритм построения максимальных независимых множеств вершин
- 11.3. Доминирующие множества
- 11.3.1. Определения
- 11.3.2. Доминирование и независимость
- 11.3.3. Задача о наименьшем покрытии
- 11.3.4. Эквивалентные формулировки знп
- 11.3.5. Связь знп с другими задачами
- Глава 12 Раскраска графов
- 12.1. Хроматическое число
- Ух, . . . ,Vn одноцветные классы,доказательство
- 12.2. Планарность
- 12.2.2. Эйлерова характеристика
- 12.2.3. Теорема о пяти красках
- 12.3. Алгоритмы раскрашивания
- 12.3.1. Точный алгоритм раскрашивания
- 12.3.2. Приближенный алгоритм последовательного раскрашивания
- 12.3.3. Улучшенный алгоритм последовательного раскрашивания