Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЭММ_Часть2_печать.doc
Скачиваний:
59
Добавлен:
03.09.2019
Размер:
5.35 Mб
Скачать

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

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

Алгоритм метода:

  1. Составляем матрицу пропускных способностей D.

  2. Копируем матрицу D в матрицу D0.

  3. Находим цепь, ведущую из источника в сток (St) и помечаем клетки данного пути знаком «−». Клетки обратного пути из t в S помечаем знаком «+».

  4. Находим минимальную пропускную способность цепи St (6.2)

(6.30)

где - предшествующий узел, - последующий.

  1. Из клеток, помеченных знаком «−» вычитаем и прибавляем к клеткам, помеченным «+».

  2. Проверяем, можно ли построить новую цепь St, если можно, то переходим на п. 3, если нельзя то переходим на п.7.

Цепь построить нельзя, если все элементы строки S или все элементы столбца t матрицы D*равны нулю.

  1. Переходим к построению матрицы максимального потока X.

  1. Величину максимального потока определяем суммированием строки матрицы или столбца матрицы или всех минимальных пропускных способностей из п.4 (6.3).

(6.31)

Пример 6.0:

Рассмотрим сеть на рис. 6.8 с данными пропускными способностями. Соответствующая матрица пропускных способностей D приведена в табл. 95.

Рис. 6.15.

Таблица 95

Матрица

S

1

2

3

4

t

S

10

3

14

4

1

5+

5

9

5

2

5

6

15

10

3

12

7

10

7

2

4

3

9+

8

13

t

3

4

5+

В качестве исходной цепи можно выбрать s14t . Таким образом, ячейки (S, 1), (1, 4) и (4, t) помечаются знаком «», а ячейки (1, s), (4, 1) и (t, 4) – знаком «+». Для данной цепи максимальный поток определяется как

 = min { ds1 , d14 , d41 }= min {10, 5, 13}= 5.

Заметим, что можно выбирать различные исходные цепи. Очевидно, что хороший выбор (вначале и на каждой итерации) должен давать наибольшее значение . Однако при этом, возможно, понадобится перебрать несколько вариантов, что в конечном итоге оказывается малоэффективным. При программировании алгоритма цепь удобно определять непосредственно из матрицы D, начиная с первой строки (S-строки) и выбирая следующий узел среди тех, которые соединены с S положительным потоком. Далее рассматривается строка, соответствующая выбранному узлу, и выбирается следующий узел, соединённый с предыдущим положительной дугой. Процесс продолжается до тех пор, пока не будет достигнут узел t.

Матрица D в табл. 95 корректируется путём вычитания = 5 из всех элементов, помеченных знаком «», и сложения со всеми элементами, имеющими знак «+». Результаты приведены в табл. 96.

Результаты последующих итераций приведены в табл. 97-100. Из табл. 100 следует, что между S и t нельзя построить цепей с положительным потоком, поскольку все элементы в столбце t равны нулю. Таким образом, табл. 100 даёт матрицу D*.

Таблица 96

Матрица

S

1

2

3

4

t

S

5

3

14

4

1

10

5

9

0

2

5

6

15+

10

3

12+

7

10

7

2

4

3

14

8

8

t

3+

4

10

цепь {S, 3, 2, t}

 = min {14, 10, 10}= 10

Таблица 97

Матрица

S

1

2

3

4

t

S

5

3

4

4

1

10+

5

9

0

2

5

6

25

0

3

22

7+

0

7

2

4

3

14

8+

8

t

13

4

10+

цепь {S134t}

 = min {5, 9, 7, 8}= 5

Таблица 98

Матрица

S

1

2

3

4

t

S

0

3

4

4

1

15

5

4

0

2

5

6

25

0

3

22

12

0

2

2

4

3+

14

13

3

t

13

4

15+

цепь {S4t}

 = min{4,3}= 3

Таблица 99

Матрица

S

1

2

3

4

t

S

0

3

4

1

1

15

5

4

0

2

5

6

25

0

3

22+

12

0

2

2

4

6

14

13

0

t

13

4+

18

цепь {S3t}

 = min{4,2}= 2

Таблица 100

Матрица

S

1

2

3

4

t

S

0

3

2

1

1

15

5

4

0

2

5

6

25

0

3

24

12

0

2

0

4

6

14

13

0

t

13

6

18

Между S и t нельзя построить цепь

В табл. 95 (матрица ) и 100 (матрица ) приведены данные, характеризующие оптимальный поток, которые получаются вычислением X=  и заменой отрицательных величин нулями. Табл. 101 даёт матрицу X.

Таблица 101

Матрица X

S

1

2

3

4

t

S

10

12

3

1

5

5

2

10

3

10

5

2

4

13

t

Из табл. 101 видно, что

Сумма всех 5 + 10 + 5 + 3 + 2 = 25 также даёт максимальный поток. Графически решение представлено на рис. 6.9.

Рис. 6.16.

Здесь уместно ввести понятие минимального разреза. Разрез в связанной сети представляет собой такое множество дуг, которое определяет нулевой поток из S в t, если пропускные способности этих дуг полагаются равными нулю. Пропускная способность разреза равна сумме пропускных способностей его дуг. В сети на рис. 6.8 можно выделить разрезы, представленные в табл. 102.

Таблица 102

Разрезы

Пропускная способность

(S, 1), (S, 2), (S, 3), (S, 4)

(4, t), (3, t), (2, t)

(1, 3), (S, 4), (3, 4), (3, t), (2, t)

10 + 2 + 14 + 4 = 31

13 + 2 + 10 = 25

5 + 4 + 7 + 2 + 10 = 25

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