Задача о максимальном потоке в сети Алгоритм Фалкерсона-Форда

advertisement
Задача о максимальном
потоке в сети
Алгоритм Фалкерсона-Форда
Постановка задачи



Пункт 0 (вход, источник) и пункт n (выход, сток) и каждой дуге
(отрезку), связывающей пункты i и j, сопоставлено число dij>0
Количество вещества, проходящего по дуге от i до j, будем
называть потоком по дуге (i, j) и обозначать через Xij .
Очевидно, что 0≤Xij≤dij для всех i, j
X
X
i

i
0j
ij
  X jk
k
  X in  Z
i
Величину Z называем величиной потока в сети и ставим задачу
максимизации Z.
Алгоритм Фалкерсона-Форда
1.
2.
3.
Обнуляем все потоки. Остаточная сеть изначально
совпадает с исходной сетью.
В остаточной сети находим любой путь из источника в сток.
Если такого пути нет, останавливаемся.
Пускаем через найденный путь (он называется
увеличивающим путём или увеличивающей цепью)
максимально возможный поток:
1.
2.
3.
На найденном пути в остаточной сети ищем ребро с минимальной
пропускной способностью cmin.
Для каждого ребра на найденном пути увеличиваем поток на cmin, а
в противоположном ему - уменьшаем на cmin.
Модифицируем остаточную сеть. Для всех рёбер на найденном
пути, а также для противоположных им рёбер, вычисляем новую
пропускную способность. Если она стала ненулевой, добавляем
ребро к остаточной сети, а если обнулилась, стираем его.
4.
Возвращаемся на шаг 2.
1.
2.
Подбирается поток с ненулевой частотой. В нашем случае в скобках
указан поток. zij ≤dij
Исходя из заданной сети N строим новую сеть N' следующим образом:
любая дуга, из которой zl=0 (старый поток) остается в новой сети с той
же пропускной способностью, если же zl≠0, эта дуга заменяется двумя
дугами – одна в том же направлении с пропускной способностью Ul-xl и
обратная к xl.
3.
Если в новой сети можно найти ненулевой поток, то добавляем его к
исходному, и получаем поток больше исходного до тех пор, пока на
шаге три для очередной сети мы не сможем найти ненулевой поток.
F’=4+1=5
Алгоритмы
Алгоритм Краскалла
Алгоритм Дейкстры
Остов минимального веса
Задача нахождения остова минимального веса во взвешенном
связном графе, возникает при проектировании линий
электропередачи, трубопроводов, дорог и т.п., когда требуется
заданные центры соединить некоторой системой каналов,
связных либо непосредственно соединяющим их каналом, либо
через другие центры и каналы, так, чтобы общая длина (или,
например, стоимость) каналов связи была минимальной.
Решение этой задачи «слепым» перебором вариантов
потребовало бы чрезвычайно больших вычислений даже при
относительно малых n (можно доказать, что полный граф Kn
содержит nn–2 различных остовных дерева). Однако для ее
решения имеются эффективные алгоритмы. Опишем два из них
- алгоритмы Дж. Краскала (1956) и Р. Прима (1957),
применяемые к произвольному связному графу (G, w) порядка
n.
Алгоритм Краскалла


Шаг
1.
Строим
граф
T1=On+e1,
присоединяя
к
пустому
графу
на
множестве вершин VG ребро e1∈VG
минимального веса.
Шаг 2. Если граф Ti уже построен и i<n–1,
то строим граф Ti+1=Ti+ei+1, где ei+1 – ребро
графа G, имеющее минимальный вес
среди ребер, не входящих в Ti и не
составляющих циклов с ребрами из Ti.
Задание


Построить связный 9-вершинный граф,
без петель и кратных ребер. Случайным
образом распределить веса ребер.
С помощью алгоритма Краскалла найти
остов минимального веса.
Задание

Дан граф, найти остов минимального веса.
4
3
2
8
5
3
4
1
9
6
7
4
5
2
2
6
1
5
3
7
Задача о минимальной связке

Найти остовное дерево графа с наименьшим
весом, используя алгоритм Краскалла.
9
12
2
7
11
3
2
6
4
1
7
6
4
8
5
3
1
1
6
2
1
7
8
5
4
9
6
10
3
11
Задача о кратчайшей цепи




Задача о кратчайшем пути. Пусть задана сеть из n + 1
вершины, то есть ориентированный граф, в котором
выделены две вершины – вход (нулевая вершина) и выход
(вершина с номером n). Для каждой дуги заданы числа,
называемые длинами дуг.
Длиной пути (контура) называется сумма длин входящих в
него дуг (если длины дуг не заданы, то длина пути (контура)
определяется как число входящих в него дуг).
Задача заключается в поиске кратчайшего пути (пути
минимальной длины) от входа до выхода сети.
Известно, что для существования кратчайшего пути
необходимо и достаточно отсутствия в сети контуров
отрицательной длины.
Алгоритм Дейкстры

Алгоритм основан на приписывании узлам
временных
или
постоянных
меток.
Первоначально
только
источнику
приписывается постоянная метка, равная нулю.
Всем другим узлам приписываются временные
метки, соответствующие весу дуги из источника
в рассматриваемый узел. Если такой дуги нет,
то узлу приписывается временная метка,
равная бесконечности.
Алгоритм Дейкстры

Для
определения
ближайшего
к
источнику узла выберем временную
метку с минимальным значением и
объявим ее постоянной. Затем, до тех
пор, пока стоку не будет приписана
постоянная
метка,
необходимо
выполнить следующее:
Алгоритм Дейкстры
Рассмотреть оставшиеся узлы с временными метками.
Сравнить величину каждой временной метки с суммой
величин последней из постоянных меток и веса дуги,
ведущей из соответствующего постоянно помеченного
узла в рассматриваемый. Минимальная из двух
сравниваемых
величин
определяется
как
новая
временная метка рассматриваемого узла.
2.
Среди временных меток выбрать минимальную и
объявить ее постоянной.
После
постоянного
помечивания
стока
алгоритм
прекращает работу, при этом минимальная сумма весов
дуг, соединяющий источник и сток, равна постоянной
метке стока. Искомая цепь состоит из дуг, для каждой из
которых разность между постоянными метками ее
концевых узлов равна весу этой дуги.
1.

Задание 1

Дана сеть. Определить ориентированную цепь
из узла S в узел t, сумма весов дуг которой
минимальна.
V1
1
V2
10
2
2
3
3
6
S
t
3
V3
3
1
7
5
V4
1
V5
Задание 2

Дана сеть. Определить
ориентированную цепь из узла S в узел
t, сумма весов дуг которой минимальна.
4
3
2
8
5
3
1
9
6
S
4
t
7
4
5
2
2
6
1
5
3
7
Задание 3

Дана сеть. Определить ориентированную цепь
из узла S в узел t, сумма весов дуг которой
минимальна.
V1
5
V2
12
S
2
6
4
V4
V5
3
4
8
3
8
t
7
2
12
V6
V3
6
9
8
5
V7
V8
Download