270 likes | 739 Views
Задача о максимальном потоке в сети. Алгоритм Фалкерсона-Форда. Постановка задачи. Пункт 0 (вход, источник) и пункт n (выход, сток) и каждой дуге (отрезку), связывающей пункты i и j , сопоставлено число d ij >0
E N D
Задача о максимальном потоке в сети Алгоритм Фалкерсона-Форда
Постановка задачи • Пункт 0 (вход, источник) и пункт n (выход, сток) и каждой дуге (отрезку), связывающей пункты i и j, сопоставлено число dij>0 • Количество вещества, проходящего по дуге от i до j, будем называть потоком по дуге (i, j) и обозначать через Xij . • Очевидно, что 0≤Xij≤dij для всех i, j • Величину Z называем величиной потока в сети и ставим задачу максимизации Z.
Алгоритм Фалкерсона-Форда • Обнуляем все потоки. Остаточная сеть изначально совпадает с исходной сетью. • В остаточной сети находим любой путь из источника в сток. Если такого пути нет, останавливаемся. • Пускаем через найденный путь (он называется увеличивающим путём или увеличивающей цепью) максимально возможный поток: • На найденном пути в остаточной сети ищем ребро с минимальной пропускной способностью cmin. • Для каждого ребра на найденном пути увеличиваем поток на cmin, а в противоположном ему - уменьшаем на cmin. • Модифицируем остаточную сеть. Для всех рёбер на найденном пути, а также для противоположных им рёбер, вычисляем новую пропускную способность. Если она стала ненулевой, добавляем ребро к остаточной сети, а если обнулилась, стираем его.
Подбирается поток с ненулевой частотой. В нашем случае в скобках указан поток. zij≤dij • Исходя из заданной сети N строим новую сеть N' следующим образом: любая дуга, из которой zl=0 (старый поток) остается в новой сети с той же пропускной способностью, если же zl≠0, эта дуга заменяется двумя дугами – одна в том же направлении с пропускной способностью Ul-xl и обратная к xl.
Если в новой сети можно найти ненулевой поток, то добавляем его к исходному, и получаем поток больше исходного до тех пор, пока на шаге три для очередной сети мы не сможем найти ненулевой поток. 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 3 4 1 5 9 6 7 5 2 4 2 6 1 5 3 7
Задача о минимальной связке • Найти остовное дерево графа с наименьшим весом, используя алгоритм Краскалла. 9 5 2 7 1 1 3 6 2 4 12 8 6 5 3 2 6 4 1 3 1 1 1 7 4 11 6 10 9 7 8
Задача о кратчайшей цепи • Задача о кратчайшем пути. Пусть задана сеть из n + 1 вершины, то есть ориентированный граф, в котором выделены две вершины – вход (нулевая вершина) и выход (вершина с номером n). Для каждой дуги заданы числа, называемые длинами дуг. • Длиной пути (контура) называется сумма длин входящих в него дуг (если длины дуг не заданы, то длина пути (контура) определяется как число входящих в него дуг). • Задача заключается в поиске кратчайшего пути (пути минимальной длины) от входа до выхода сети. • Известно, что для существования кратчайшего пути необходимо и достаточно отсутствия в сети контуров отрицательной длины.
Алгоритм Дейкстры • Алгоритм основан на приписывании узлам временных или постоянных меток. Первоначально только источнику приписывается постоянная метка, равная нулю. Всем другим узлам приписываются временные метки, соответствующие весу дуги из источника в рассматриваемый узел. Если такой дуги нет, то узлу приписывается временная метка, равная бесконечности.
Алгоритм Дейкстры • Для определения ближайшего к источнику узла выберем временную метку с минимальным значением и объявим ее постоянной. Затем, до тех пор, пока стоку не будет приписана постоянная метка, необходимо выполнить следующее:
Алгоритм Дейкстры • Рассмотреть оставшиеся узлы с временными метками. Сравнить величину каждой временной метки с суммой величин последней из постоянных меток и веса дуги, ведущей из соответствующего постоянно помеченного узла в рассматриваемый. Минимальная из двух сравниваемых величин определяется как новая временная метка рассматриваемого узла. • Среди временных меток выбрать минимальную и объявить ее постоянной. • После постоянного помечивания стока алгоритм прекращает работу, при этом минимальная сумма весов дуг, соединяющий источник и сток, равна постоянной метке стока. Искомая цепь состоит из дуг, для каждой из которых разность между постоянными метками ее концевых узлов равна весу этой дуги.
Задание 1 • Дана сеть. Определить ориентированную цепь из узла S в узел t, сумма весов дуг которой минимальна. V1 V2 10 1 2 2 3 3 6 S t 3 V3 3 1 7 5 V4 V5 1
4 3 2 8 3 4 1 5 9 6 t S 7 5 2 4 2 6 1 5 3 7 Задание 2 • Дана сеть. Определить ориентированную цепь из узла S в узел t, сумма весов дуг которой минимальна.
Задание 3 • Дана сеть. Определить ориентированную цепь из узла S в узел t, сумма весов дуг которой минимальна. V2 5 12 V3 V1 6 6 5 9 4 V5 8 V4 3 8 t S 2 3 7 4 8 2 12 V8 V6 V7