Скачать презентацию Сеть представляется в виде конечного Связного орграфа G V Скачать презентацию Сеть представляется в виде конечного Связного орграфа G V

16- Максимальный поток в сети.ppt

  • Количество слайдов: 29

Сеть представляется в виде конечного Связного орграфа G(V, E) без петель, каждой дуге которого Сеть представляется в виде конечного Связного орграфа G(V, E) без петель, каждой дуге которого поставлено в соответствие некоторое неотрицательное число , называемое пропускной способностью C(e) дуги, и в котором существуют один источник и один сток Источник – вершина. V 0=S , в которую не заходит ни одна дуга Сток - вершина Vn=T, из которой не выходит ни одной дуги

Потоком сети называется неотрицательная функция f такая, что f(e) меньше или равно (Поток не Потоком сети называется неотрицательная функция f такая, что f(e) меньше или равно (Поток не может превышать пропускную способность дуги. ). Дуга называется насыщенной потоком, если поток через эту дугу равен пропускной способности дуги f(e)=

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

Алгоритм начинает работу с произвольного допустимого потока (можно взять и нулевой поток), затем стремится Алгоритм начинает работу с произвольного допустимого потока (можно взять и нулевой поток), затем стремится увеличить его с помощью систематического поиска всех возможных аргументальных цепей (тех, которые можно увеличить) потока от S к T. Поиск таких цепей осуществляется с помощью расстановки пометок в вершинах графа. Пометка указывает вдоль каких дуг может быть увеличен поток и на сколько. Как только найдена одна из таких цепей, поток вдоль неё увеличивают до максимального значения, а пометки в вершинах стираются, и вновь полученный поток используется в качестве исходного при новой расстановке пометок. Алгоритм завершает работу, когда нельзя найти ни одной аргументальной цепи.

Вершина может находиться в одном из трех состояний: 1. Вершина просмотрена и ей приписана Вершина может находиться в одном из трех состояний: 1. Вершина просмотрена и ей приписана пометка (Она имеет пометку и все смежные с ней вершины обработаны. ). 2. Вершина помечена, но не просмотрена(Она имеет пометку, но смежные с ней вершины не обработаны. ). 3. Вершина не имеет пометок.

Пометка произвольной вершины состоит из двух частей: Часть « » означает, что поток допускает Пометка произвольной вершины состоит из двух частей: Часть « » означает, что поток допускает увеличение вдоль дуги. « » задает максимальную величину дополнительного потока, который протекает от S к вдоль построенной аргументальной цепи потока.

Процедура нахождения максимального потока состоит из трех пунктов: 1. Вершине S присвоить пометку 2. Процедура нахождения максимального потока состоит из трех пунктов: 1. Вершине S присвоить пометку 2. Каждой непомеченной ненасыщенной вершине 3. инцидентной предыдущей вершине присвоить пометку , где 4. 3. Пункт 2 повторяется пока либо будет помечена вершина Т(В этом случае возвращаемся к стоку и начинаем алгоритм заново учитывая насыщенные дуги), либо пока никаких других пометок нельзя будет поставить(В этом случае полученный поток является максимальным)

8 7 1 4 6 3 2 5 4 T 10 12 S 3 8 7 1 4 6 3 2 5 4 T 10 12 S 3 5 8 7 7 2 2 7 S-источник T-сток 1, 2, 3…-вершины графа Пропускные способности дуг

+ 8 7 1 4 6 3 2 5 4 T 10 12 S + 8 7 1 4 6 3 2 5 4 T 10 12 S 3 5 8 7 7 2 2 Шаг 1: Вершине S присваиваем пометку 7 + Отмечаем вершину S как просмотренную ( ), Инцидентные ей вершины (1, 2) – как помеченные(+)

+ 8 7 1 4 6 3 2 5 4 T 10 12 S + 8 7 1 4 6 3 2 5 4 T 10 12 S 3 5 8 7 7 2 Шаг 2: 2 + Помеченные вершины имеют метки: 1: (S, 4); 2: (S, 7). 7 Выбираем max(4, 7)=7 Вершину « 2» отмечаем как просмотренную

8 7 1 4 6 3 2 5 4 T 10 + S 12 8 7 1 4 6 3 2 5 4 T 10 + S 12 3 5 8 7 7 7 2 2 Инцидентные ей вершины (3, 7) отмечаем как помеченные(+) Помеченные вершины имеют метки: 3: (2, 7); 7: (2, 2). 7 + Выбираем max(7, 2)=7 Вершину « 3» отмечаем как просмотренную

8 7 1 4 6 3 2 5 4 T 10 12 S 3 8 7 1 4 6 3 2 5 4 T 10 12 S 3 + 5 8 7 7 2 2 Инцидентную ей вершину (5) отмечаем как помеченную(+) Помеченная вершина имеет метку: 5: (3, 12). 7 Вершину « 5» отмечаем как просмотренную Поток через эту дугу будет Min(7, 12)=7

8 7 1 4 6 3 2 5 4 + T 10 12 S 8 7 1 4 6 3 2 5 4 + T 10 12 S 3 7 5 8 7 7 2 2 Из вершины « 5» можно добраться до стока Сток имеет метку: Т: (5, 10). 7 Вершину «T» отмечаем как просмотренную Поток через эту дугу будет Min(7, 10)=7

8 7 1 4 6 3 2 5 4 T 7 10 12 S 8 7 1 4 6 3 2 5 4 T 7 10 12 S 3 7 5 8 7 7 2 7 2 Сток просмотрен. Промежуточное значение максимального потока равно 7 Дуги (S, 2)и(2, 3) насыщены Стираем все метки.

+ 8 7 1 4 6 3 2 Мах поток =7 5 4 T + 8 7 1 4 6 3 2 Мах поток =7 5 4 T 10 12 S 3 5 8 7 7 2 2 7 Повторяем Шаг 2: Помеченная вершина имеет метку: 1: (S, 4). Вершину « 1» отмечаем как просмотренную

+4 8 1 7 6 3 2 Мах поток =7 5 4 4 T +4 8 1 7 6 3 2 Мах поток =7 5 4 4 T 10 S 3 + 12 7 7 5 8 7 7 2 2 Инцидентные ей вершины (3, 4) отмечаем как помеченные(+) Помеченные вершины имеют метки: 3: (1, 2); 4: (1, 8). 7 Выбираем max(2, 8)=8 Вершину « 4» отмечаем как просмотренную Поток через эту дугу: Min(4, 8)=4

4 8 + 7 1 4 6 3 2 Мах поток =7 5 4 4 8 + 7 1 4 6 3 2 Мах поток =7 5 4 4 T 10 12 S 3 7 7 5 8 7 7 2 2 Инцидентную ей вершину (6) отмечаем как помеченную(+) Помеченная вершина имеет метку: 6: (4, 7). 7 Вершину « 6» отмечаем как просмотренную Поток через эту дугу будет Min(4, 7)=4

4 8 7 1 4 4 6 3 2 Мах поток =7 5 4 4 8 7 1 4 4 6 3 2 Мах поток =7 5 4 4 T 10 12 S 3 7 + 7 5 8 7 7 2 2 Из вершины « 6» можно добраться до стока Сток имеет метку: Т: (6, 3). 7 Вершину «T» отмечаем как просмотренную Поток через эту дугу будет Min(4, 3)=3

3 8 7 1 3 4 6 3 2 3 Мах поток =10 5 3 8 7 1 3 4 6 3 2 3 Мах поток =10 5 4 3 T 10 12 S 3 7 7 5 8 7 7 2 Сток просмотрен. Промежуточное значение максимального потока равно 10 Дуги (S, 2), (2, 3)и(6, Т) насыщены Стираем все метки.

+ 8 3 3 1 7 4 6 3 2 Мах поток =10 5 + 8 3 3 1 7 4 6 3 2 Мах поток =10 5 4 3 T 10 12 S 3 7 7 5 8 7 7 2 2 7 Повторяем Шаг 2: Помеченная вершина имеет метку: 1: (S, 1). По дуге уже идет поток=3 Вершину « 1» отмечаем как просмотренную

+ 8 3 1 3 7 4 6 3 1 2 Мах поток =10 + 8 3 1 3 7 4 6 3 1 2 Мах поток =10 5 4 3 T 10 + S 12 3 7 7 5 8 7 7 2 2 Инцидентные ей вершины (3, 4) отмечаем как помеченные(+) Помеченные вершины имеют метки: 3: (1, 2); 4: (1, 5). 7 Выбираем max(2, 5)=5 Вершину « 4» отмечаем как просмотренную Поток через эту дугу: Min(1, 5)=1

8 3 1 1 3 + 7 4 6 3 1 2 Мах поток 8 3 1 1 3 + 7 4 6 3 1 2 Мах поток =10 5 4 3 T 10 12 S 3 7 7 5 8 7 7 2 2 Инцидентную ей вершину (6) отмечаем как помеченную(+) Помеченная вершина имеет метку: 6: (4, 4). 7 Вершину « 6» отмечаем как просмотренную Поток через эту дугу будет Min(1, 4)=1

8 3 1 1 3 7 1 4 6 3 1 2 Мах поток 8 3 1 1 3 7 1 4 6 3 1 2 Мах поток =10 5 4 3 T 10 12 S 3 7 +5 7 8 7 7 2 2 Инцидентную ей вершину (5) отмечаем как помеченную(+) Помеченная вершина имеет метку: 5: (6, 5). 7 Вершину « 5» отмечаем как просмотренную Поток через эту дугу будет Min(1, 5)=1

8 3 1 1 3 7 1 4 6 3 Мах поток =10 1 8 3 1 1 3 7 1 4 6 3 Мах поток =10 1 1 2 5 4 3 T 10 12 S 3 7 7 5 8 7 7 2 2 Из вершины « 5» можно добраться до стока Сток имеет метку: Т: (5, 10). 7 Вершину «T» отмечаем как просмотренную Поток через эту дугу будет Min(1, 10)=1 +

8 3 1 1 3 7 1 4 6 3 Мах поток =11 1 8 3 1 1 3 7 1 4 6 3 Мах поток =11 1 1 2 5 4 3 T 1 10 12 S 3 7 7 5 8 7 7 2 Сток просмотрен. Промежуточное значение максимального потока равно 11 Дуги (S, 1), (S, 2), (2, 3)и(6, Т) насыщены Стираем все метки.

8 3 1 1 3 7 1 4 6 3 Мах поток =11 1 8 3 1 1 3 7 1 4 6 3 Мах поток =11 1 2 5 4 T 1 10 12 S 3 7 7 5 8 7 7 2 2 7 Больше нет возможности расставлять метки => полученный поток максимален.