Потоки в сетях.
This presentation is the property of its rightful owner.
Sponsored Links
1 / 10

Потоки в сетях. PowerPoint PPT Presentation


  • 163 Views
  • Uploaded on
  • Presentation posted in: General

Потоки в сетях. Сеть – это ориентированный нагруженный граф, в котором нагрузка имеет интерпретацию «пропускная способность» (разумеется, положительная; можно считать, что отсутствующее ребро соответствует нулевой нагрузке). Будем обозначать эту нагрузку c (u, v). 12/12. 12. 1. 2. 11/16.

Download Presentation

Потоки в сетях.

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


4094791

Потоки в сетях.

Сеть – это ориентированный нагруженный граф, в котором нагрузка имеет интерпретацию«пропускная способность» (разумеется, положительная; можно считать, что отсутствующее ребро соответствует нулевой нагрузке). Будем обозначать эту нагрузку c (u, v).

12/12

12

1

2

11/16

16

15/20

20

И

1/4

С

4

10

7/7

7

9

4/9

8/13

13

4

4/4

3

4

11/14

14

Мы будем считать, чтоa) в сети есть две выделенные вершины – исток (только исходящие дуги) и сток (только входящие дуги);

b) любая вершина лежит на каком-нибудь пути из истока в сток (нет «бесполезных» вершин).

Поток в сети – это задание некоторой дополнительной нагрузки на ребра.

Свойства потока:a) поток по ребру не может превышать пропускной способности ребра и всегда неотрицателен;

b) в любую вершину (кроме истока и стока) количество втекающей жидкости равно количеству вытекающей.

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


4094791

Потоки в сетях.

Пусть задана сеть и поток в ней. Свяжем с потоком функцию f (u, v), обладающую следующими свойствами:

12/12

1

2

11/16

15/20

И

1/4

С

10

7/7

4/9

8/13

4/4

3

4

11/14

a) если по ребру (u,v) идет поток величиной c, то положим f (u, v) = c, f (v, u) = -c;

b) если есть два «встречных» потока c1 и c2 по ребрам (u, v) и (v, u) соответственно, то полагаем f (u, v) = c1-c2. На самом деле всегда можно считать, что на самом деле есть только один поток величиной |c1-c2|.

На приведенной выше картинке: f (И, 3) = 8; f (3, 2) = -4; f (1, 3) = -1.

Для каждого ребра (при заданном потоке f) определим также его «остаточную пропускную способность»: cf(u, v) = c (u, v) – f(u, v)

Например, для заданного потока cf(3, 4) = 3, cf(1, 3) = 11.


4094791

Метод Форда – Фалкерсона

Будем искать дополняющие пути из истока в сток, по которому можно пропуститьдополнительное количество вещества. Тогда схема алгоритма может быть записанаследующим образом:

f = 0;

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

дополнить f вдоль p;

}

Для поиска дополняющих путей найдем все остаточные пропускные способности ребер сетии составим остаточную сеть из всех положительных величин:

12/12

12

1

1

2

2

5

5

11/16

15/20

11

15

5

И

И

1/4

С

С

7

11

10

3

7/7

4/9

8

4

5

8/13

4

4/4

3

3

4

3

4

11/14

11

12/12

1

2

11/16

19/20

И

1/4

С

10

7/7

9

12/13

4/4

3

4

11/14


4094791

Пример реализации метода Форда – Фалкерсона

12/12

12

12

1

2

1

2

4

12/16

20

16

12/20

8

12

И

12

И

С

С

10

4

10

4

9

7

9

7

13

13

4

4

3

4

3

4

14

14

12/12

12

1

2

1

2

4

12/16

19/20

1

12

И

19

И

С

С

10

4

7/7

10

4

9

9

7

6

7/13

4

7

4

7

3

4

3

4

7/14

7

12/12

12

1

2

1

2

4

12/16

19/20

1

12

19

И

И

С

С

10

10

4

7/7

4

9

9

7

4

11/13

4/4

3

4

3

4

11

3

4

11/14

11


4094791

Выбор дополняющего пути в методе Форда – Фалкерсона

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

1

1

1 000 000

999 999

1/1 000 000

1 000 000

1 000 000

С

1

С

И

1/1

1

1

И

1

999 999

1 000 000

2

1/1 000 000

1 000 000

1 000 000

2

1

1/1 000 000

1/1 000 000

и так далее, всего 2 000 000 шагов…

С

1

И

1/1 000 000

2

1/1 000 000

Можно попробовать искать кратчайший (по числу ребер) дополняющий путь между истоком и стоком. Например, с помощью поиска в ширину. Получающийся при этом алгоритм(реализация метода Форда – Фалкерсона) называется алгоритмом Эдмондса – Карпа).

Можно показать, что в алгоритме Эдмондса – Карпа число шагов ограничено сверху числом2nm, где m – число ребер в сети, а n – число вершин. Поскольку поиск в ширину, изменениепотоков вдоль ребер и построение остаточной сети требуют времени O(m), то общее времяработы алгоритма можно оценить как O(m2n).


4094791

Сеть с несколькими истоками и стоками

Если в графе есть несколько истоков и/или несколько стоков, то задача нахождениямаксимального потока в такой сети сводится к задаче с одним истоком и одним стоком.

1

3

8

5

10

15

И1

21

11

12

С1

2

17

13

18

6

С

И2

И

12

12

27

18

13

3

С2

9

15

17

20

И3

4

7

17

22

4


4094791

Максимальное паросочетание в двудольном графе

Метод Форда – Фалкерсона можно использовать и для решения других задач, например, дляпоиска максимального паросочетания в двудольном графе.

Паросочетание – это множество ребер в двудольном графе, при котором каждая вершина связана не более, чем с одним ребром из этого множества.

a1

b1

a2

Максимальное паросочетание – это паросочетаниес наибольшим числом ребер.

b2

a3

b3

a4

b4

a5


4094791

Применение метода Форда – Фалкерсона для нахождения максимальногопаросочетания

Добавим в граф две вершины – исток и сток – так, как показано на рисунке. Пропускную способность всех ребер полагаем равной единице. Тогда максимальный поток определитмаксимальное паросочетание в этом графе.

a1

b1

a2

b2

И

a3

С

b3

a4

b4

a5


4094791

Проталкивание предпотока для нахождения максимального потока

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

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

Жидкость сливается по одному из возможных ребер остаточной сети.

И так далее...

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

6

5

4

13/13

16/16

16/16

3

3/10

2

10

13

4/10

10

10

12/12

10

1

4

12

12/12

9/9

9

14

16

12

9

4

0

16

12

13

26

17

3

И

С

4

7

4

7


4094791

Реализация алгоритма проталкивания предпотока

for (int i = 0; i < n; ++i) {

h[i] = 0; e[i] = 0;

}

h[s] = n;

for (Arc arc : arcs) {

int u = arc.start; v = arc.end;

f[u,v] = f[v,u] = 0;

}

for (int u : adj(s)) {

f[s,u] = c[s,u];

f[u,s] = -c[s,u];

e[u] = c[s,u];

}

while (есть избыточные вершины) {

for (int u : excs) {

if (возможно проталкивание избытка)

протолкнуть избыток;

else

поднять вершину;

}

}

Никакая вершина не может быть поднята на высоту, большую или равную 2n. Поэтому общее число операций подъема не может быть больше 2n2.

Можно показать, что общее число операций оценивается как O(n2m), что лучше, чем в алгоритмеЭдмондса – Карпа (O(nm2)).


  • Login