Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конспект лекций СиАОД.docx
Скачиваний:
17
Добавлен:
01.03.2025
Размер:
4.62 Mб
Скачать
    1. Метод Форда-Фалкерсона

Основные понятия: остаточные сети, дополняющие пути и разрезы.

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

FORD-FOLKERSON_METHOD (G,s,t)

1 положить поток f равным 0

2 while (пока) существует дополняющий путь p

3 do дополнить f вдоль p

4 return f

Остаточные сети

Пусть G=(V,E) - сеть с истоком s и стоком t. Пусть f - поток в этой сети. Для любой пары вершин u и v рассмотрим остаточную пропускную способность из u в v, определяемую как

cf(u,v) = c(u,v) - f(u,v)

Сеть Gf=(V,Ef) , где

Ef = {(u,v)  VV : cf(u,v) >0 }

назовем остаточной сетью сети G , порожденной потоком f. Ее ребра, называемые остаточными ребрами, допускают положительный поток.

Остаточное ребро не обязано быть ребром сети

Пример потока

Остаточная сеть

Дополняющие пути

Пусть f - поток в сети G=(V,E). Назовем дополняющим путем простой путь из истока s в сток t в остаточной сети Gf.

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

cf(p) = min { cf(u,v) : (u,v)  p}

Разрезы в сетях

Разрезом сети G=(V,E) называется разбиение множества V на две части S и T=V\S, для которых sS и tT.

Пропускной способностью разреза (S,T) называют сумму пропускных способностей пересекающих разрез ребер.

Минимальным разрезом называется разрез ниаменьшей пропускной способности (среди всех разрезов данной сети)

Пример разреза

Теорема (о максимальном потоке и минимальном разрезе)

Пусть f – поток в сети G=(V,E). Тогда следующие утверждения равносильны:

1. Поток максимален в сети G.

2. Остаточная сеть Gf не содержит дополняющих путей.

3. Для некоторого разреза (S,T) сети G выполнено равенство  f  = c(S,T)

Общая схема алгоритма Форда-Фалкерсона

FORD-FULKERSON (G,s,t)

1 for (для) каждого ребра (u,v)  E[G]

2 do f[u,v]  0

3 f[v,u]  0

4 while в остаточной сети Gf существует путь p из s в t

5 do cf(p)  min{cf(u,v): (u,v) входит в p}

6 for (для) каждого ребра (u,v) пути p

7 do f[u,v]  f[u,v] + cf(p)

8 f[v,u]  -f[u,v]

Пример исполнения алгоритма

рис а

рис б

рис в

рис г

рис д

Анализ алгоритма Форда-Фалкерсона

Время работы зависит от того, как ищется путь.

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

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

Эта реализация метода Форда-Фалкерсона, называется алгоритмом Эдмондса-Карпа и имеет время работы O(VE2)

    1. Минимальные покрывающие деревья

Минимальные покрывающие деревья

Задача

Необходимо соединить n контактов на печатной плате, затратив провод минимальной длины.

Упрощенная математическая модель

Задача о минимальном покрывающем дереве

Пусть имеется связный неориентированный граф G=(V,E), в котором V – множество контактов, а E – множество их возможных попарных соединений. Для каждого ребра графа (u,v) задан неотрицательный вес w(u,v) (длина провода, необходимого для соединения u и v).

Задача состоит в нахождении подмножества T  E, связывающего все вершины, для которого суммарный вес минимален

Такое подмножество T можно считать деревом (в любом цикле один из проводов можно удалить, не нарушая связности).

Связный подграф графа G, являющийся деревом и содержащий все его вершины, называют покрывающим (остовным) деревом графа.

Пример графа

Покрывающее дерево графа

Почему задача о минимальном покрывающем дереве является упрощением реальной ситуации?

Алгоритмы Крускала и Прима решают задачу о минимальном покрывающем дереве различными способами.

Оба алгоритма следуют «жадной» стратегии: на каждом шаге выбирается «локально наилучший» вариант.

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

Построение минимального покрывающего дерева

Дан связный неориентированный граф G=(V,E) и весовая функция w:ER.

Общая схема алгоритмов.

Искомый остов строится постепенно: к изначально пустому множеству A на каждом шаге добавляется одно ребро.

Ребро (u,v) добавляемое на очередном шаге, выбирается так, чтобы не нарушить этого свойства:

A {(u,v)} тоже должно быть подмножеством минимального остова. Такое ребро называется безопасным ребром для A.

GENERIC-MST(G,w)

1 A  

2 while (пока) A не является остовом

3 do найти безопасное ребро (u,v)для A

4 A {(u, v)}

5 return A

Определения

Разрезом (S,V\S) неориентированного графа G=(V,E) называется разбиение множества его вершин на два подмножества.

Говорят, что ребро (u,v)E пересекает разрез (S,V\S), если один из его концов лежит в S, а другой - в V\S.

Разрез согласован с множеством ребер A, если ни одно ребро из A не пересекает этот разрез.

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

Теорема

Пусть G=(V,E) - связный неориентированный граф, на множестве вершин которого определена вещественная функция w. Пусть A - множество ребер, являющееся подмножеством некоторого минимального остова графа G. Пусть (S,V\S) - разрез графа G, согласованный с A, а (u,v) - легкое ребро для этого разреза. Тогда ребро (u,v) является безопасным для A.

Доказательство.

Пусть T- минимальный остов, содержащий A. Предположим, что T не содержит ребра (u,v), поскольку в противном случае доказываемое утверждение очевидно.

Покажем, что существует другой минимальный остов T , содержащий A {(u,v)}, так что ребро (u,v), является безопасным для A.

Остов T связен и потому содержит некоторый (единственный) путь p из u в v; ребро (u,v) замыкает этот путь в цикл. Поскольку вершины u и v принадлежат разным частям разреза (S,V\S), в пути p есть по крайней мере одно ребро (x,y) , пересекающее разрез. Это ребро не лежит в A, так как разрез согласован с A. Добавим к дереву T ребро (u,v) и удалив из получившегося цикла ребро (x,y), получим новый остов T = T\{(u,v) }  {( x,y)}.

Покажем, что T - минимальный остов. Поскольку (u,v) - легкое ребро, пересекающее разрез (S,V\S), изъятое из T ребро (x,y) имеет не меньший вес, чем добавленное вместо него ребро (u,v), так что вес остова мог только уменьшиться. Но остов был минимальным, значит , вес его остался прежним, и новый остов T будет другим минимальным остовом (того же веса). Поэтому ребро (u,v), содержащееся в T, является безопасным.

Следствие

Пусть G=(V,E) - связнвый неориентированный граф и на множестве E определена весовая функция w. Пусть A - множество ребер графа, являющееся подмножеством некоторого минимального остова. Рассмотрим лес GA=(V,A) . Пусть дерево C - одна из связных компонент леса GA. Рассмотрим все ребра графа, соединяющие вершины из C с вершинами не из C, и возьмем среди них ребро наименьшего веса. Тогда это ребро безопасно для A.

Доказательство

Разрез (C,V\C), согласован с A, а ребро (u,v) - легкое ребро для этого разреза.