Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
математи.моделир.doc
Скачиваний:
3
Добавлен:
14.11.2019
Размер:
3.55 Mб
Скачать

Методические рекомендации к решению задач о максимальном потоке ( 228–257 )

Для решения задачи необходимо рассмотреть алгоритм построения максимального потока:

  1. построить некоторый начальный поток Х0 ={х0ij};

  2. организовать процедуру составления подмножества А вершин, достижимых из истока I по ненасыщенным ребрам. Если в этом процессе сток S не попадет в подмножество А, то построенный поток максимальный и задача решена. Если же S попал в А, то перейти к п.3 алгоритма;

  3. выделить путь из I в S, состоящий из ненасыщенных ребер, и увеличить поток хij по каждому ребру этого пути на Δ = min(rij - хij), где минимум берется по ребрам (i, j) упомянутого пути. Тем самым будет построен новый поток Х1 ={х1ij}. После этого надо возвратиться к п.2 алгоритма.

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

Пример. На сети, изображенной на рисунке 4, сформировать поток максимальной мощности, направленный из истока I в сток S, при условии, что пропускные способности ребер в обоих направлениях одинаковы. Выписать ребра, образующие на сети разрез минимальной пропускной способности.

Рисунок 4 - Сеть

Решение. В соответствии с п.1 алгоритма на сети необходимо сформировать начальный поток Х0. Сделаем это, следующим образом. По пути 1–3–4–6 пропустим 1 ед., по пути 1–2–3–4–6 — 1 ед., по пути 1–2–5–6 — 3 ед. В результате потоки хij по ребрам сети будут равны: х12 =4, х13 =1, х23 =1, х25 = 3, х34 = 2, х46 = 2, х56 = 3; потоки по остальным ребрам сети равны нулю. Совокупность перечисленных потоков по ребрам и составит поток Х0 по сети. Видно, что условия (2) и (3), налагаемые на потоки по ребрам сети выполняются. Матрица пропускных способностей ребер данной сети приведена в таблице 15, а матрица построенного потока – в таблице 16.

Таблица 15 – Матрица пропускных способностей ребер

j

i

1

2

3

4

5

6

1

0

6

1

0

0

0

2

6

0

2

0

3

0

3

1

2

0

3

0

0

4

0

0

3

0

1

2

5

0

3

0

1

0

5

6

0

0

0

2

5

0

Таблица 16 – Матрица построенного потока

j

i

1

2

3

4

5

6

1

0

4

1

0

0

0

2

-4

0

1

0

3

0

3

-1

-1

0

2

0

0

4

0

0

-2

0

0

2

5

0

-3

0

0

0

3

6

0

0

0

-2

-3

0

Приступая к выполнению п.2 алгоритма, составим матрицу R Х0 (таблица 17), элементы rij хij которой позволяют судить о ненасыщенности ребер сети. Насыщенным ребрам будут соответствовать нулевые элементы, а ненасыщенным – ненулевые. Так, ребро (1, 2) ненасыщенное, поэтому элемент r12 - х012 = 6-4=2≠0, а вот ребро (2,5) насыщенное, поэтому r25 - х025 = 3 – 3 = 0.

Таблица 17 – Матрица R– Х0

j

i

1

2

3

4

5

6

1

0

2

0

0

0

0

2

10

0

1

0

0

0

3

2

3

0

1

0

0

4

0

0

5

0

1

0

5

0

6

0

1

0

2

6

0

0

0

4

8

0

Зная матрицу R Х0, можно сформировать подмножество А вершин, в которые можно попасть из истока I, двигаясь только по насыщенным путям (т.е. выполнить п.2 алгоритма), а также выделить (если Х0 немаксимален) эти пути и с их помощью увеличить мощность потока (т.е. выполнить п.3 алгоритма).

Вершины подмножества А выделяют постепенно, начиная с истока I. С этой целью просматривают первую строку матрицы R Х0 (строку I) и выписывают номера i1, i2, ..., ik вершин, соответствующих ненулевым элементам строки. Это и будут вершины, в которые можно попасть из истока I , перемещаясь по ненасыщенным ребрам. Будем записывать выявленные таким образом вершины в виде I||i1,i2,...,ik и называть подобную запись списком вершины I. Далее рассматривают каждую из вершин it полученного списка и составляют для нее аналогичным образом свой список. При этом вершины, встречавшиеся в прежних списках, повторно не выписываются. Если в этом процессе сток S не встретится, - поток максимален и задача решена, если же при составлении очередного списка в нем появится сток S, то поток немаксимален и мощность его можно увеличить.

В примере в данном случае I = 1, S = 6. построим подмножество А, последовательно составляя списки вершин, начиная с вершины 1. Судя по первой строке матрицы R Х0 (таблица 17) в список вершины 1 войдет одна вершина 2, поскольку только элемент второго столбца этой строки отличен от нуля. Итак: 1 || 2. Теперь переходим к списку вершины 2 как вершины, вошедшей в список вершины 1. во второй строке матрицы два элемента отличны от нуля: 10 и 1. Но 10 соответствует вершине 1, которая уже значится в подмножестве А, поэтому повторно ее в списки не включаем. Элемент 1 соответствует вершине 3, и она встречается впервые, а поэтому включаем ее в список вершины 2. Таким .образом приходим к следующему списку: 2 || 3. Таким же способом получаем и остальные списки. В результате получаем набор:

1 || 2, 2 || 3, 3 || 4, 4 || 5, 5 || 6 (1)

Анализируя списки (1) видно, что сток 6 попал в подмножество А, поскольку оказался в списке одной из вершин подмножества А (в данном случае вершины 5). Значит, существует путь из истока I в сток S (у нас это из 1 в 6), состоящий из ненасыщенных ребер.

Построение ненасыщенного пути из I в S начинают с последнего ребра этого пути. Им будет ребро (in-1, S), где in-1 – вершина, в список которой попал сток S. Далее выписывают ребро (in-2, in-1), где in-2 – вершина, в список которой попала вершина in-1 и так до тех пор, пока на очередном шаге не встретится ребро (I, i1), которым и начинается искомый ненасыщенный путь. Т. обр., ненасыщенный путь из I в S состоит из ребер (I, i1), (i1, i2), …, (in-2, in-1), (in-1, S).

Просматривая списки (1) в примере от конца к началу, замечаем, что ребро (in-1, S) в данном случае является (5,6), ребром (in-2, in-1) – ребро (4,5), …, и наконец, ребро (I, i1) – ребро (1,2). Таким образом, путь из истока 1 в сток 6 по ненасыщенным ребрам пройдет через вершины 1, 2, 3, 4, 5 и 6.

После выделения ненасыщенного пути из истока I в сток S остается с помощью матрицы R Х0 определить величину Δ = min(rijхij), на которую нужно увеличить поток по каждому ребру (i,j) выделенного пути, чтобы получить новый поток Х1 большей мощности (на Δ единиц).

В примере, как видно из таблицы 15, по ребру (1, 2) дополнительно можно пропустить 2 ед., по ребрам (2, 3), (3,4), (4,5) и (5,6) – соответственно 1, 1, 1 и 2 ед., так что увеличить поток по всему пути 1–2–3–4–5–6, составленному из указанных ненасыщенных ребер, можно на величину

Для построения матрицы нового потока Х1 к соответствующим элементам х0ij матрицы Х0 прибавляется найденное значение Δ, после чего возвращаемся к п. 2 алгоритма, и так до получения максимального потока.

В примере на величину Δ = 1 возрастут элементы х012, х023, х034, х045 и х056 матрицы Х0 (таблица 16). С учетом соглашения: в теории потоков предполагается, что если из вершины i в вершину j направляется поток величиной хij, то величина потока j из в i равна - хij, т.е.

хji = – хij.

Приходим к матрице нового потока Х1 (таблица 18).

Построенный поток Х1 вновь надо исследовать на оптимальность , т.е.вернуться к операциям п. 2 алгоритма. С этой целью, как и при исследовании потока Х0, составляем матрицу R Х1 (таблица 19), а по ней – списки вершин, достижимых из истока I по ненасыщенным путям. В результате получаем списки:

1 || 3, 3 || . (2)

Таблица 18 – Матрица нового потока Х1

j

i

1

2

3

4

5

6

1

1

0

0

0

0

0

2

11

0

0

0

0

0

3

2

4

0

0

0

0

4

0

0

6

0

0

0

5

0

6

0

2

0

1

6

0

0

0

4

9

0

Таблица 19 – Матрица R– Х1

j

i

1

2

3

4

5

6

1

0

5

1

0

0

0

2

-5

0

2

0

3

0

3

-1

-2

0

3

0

0

4

0

0

-3

0

1

2

5

0

-3

0

-1

0

4

6

0

0

0

-2

-4

0

Как видно из списков (2), сток 6 не попал в список вершин, достижимых из из I по ненасыщенным ребрам. Значит, поток Х1 максимален. Остается нанести его на сеть с указанием направления потоков по отдельным ребрам (рисунок 5).

Рисунок 5 – Решение задачи о максимальном потоке

Используя списки (2), выделим подмножество А и В, на которые оказалось разбито множество всех вершин: А = {1, 3}, B = {2, 4, 5, 6}. А теперь выпишем ребра, образующие разрез А/В минимальной пропускной способности: (1, 2), (3, 2), (3, 4).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]