A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Algoritmos em Grafos Celso C. Ribeiro Caroline T. Rocha.

Apresentações semelhantes


Apresentação em tema: "Algoritmos em Grafos Celso C. Ribeiro Caroline T. Rocha."— Transcrição da apresentação:

1 Algoritmos em Grafos Celso C. Ribeiro Caroline T. Rocha

2 2Algoritmos em Grafos PARTE 4: PROBLEMA DO FLUXO MÁXIMO

3 3Algoritmos em Grafos Problema do Fluxo Máximo Dados: Grafo G=(X,U) orientado u U: capacidade c(u) 0 f(u) c(u) Problema: Obter um fluxo máximo de S a P respeitando as restrições de capacidade e as restrições de conservação de fluxo em cada nó. SP fontesumidourof

4 4Algoritmos em Grafos Problema do Fluxo Máximo Exemplo: SP f SP a b , 2, 3, 0, 3, capacidades c fluxos f Inserindo-se um arco de retorno, transforma-se um fluxo em uma circulação:

5 5Algoritmos em Grafos Problema do Fluxo Máximo Com o arco de retorno: v, x = S 0, x S, x P -v, x P I(u)T(u) u

6 6Algoritmos em Grafos Exemplo: Problema do Fluxo Máximo a b c d e SP Capacidades associadas aos nós: x x1x1 2 8 x2x2 7 3 c(x )

7 7Algoritmos em Grafos Problema do Fluxo Máximo Algoritmo de rotulação de Ford e Fulkerson (idéia básica) Início: fluxo viável (por exemplo um fluxo nulo) Iteração: Determinar um caminho C de S a P ao longo do qual nenhum arco esteja saturado. (isto é, f(u) = c(u)) Circuito = C {(P,S)} Aumentar o fluxo ao longo dos arcos de do valor = min u [c(u)-f(u)]

8 8Algoritmos em Grafos Exemplo: Problema do Fluxo Máximo SP a b Este fluxo (f=3) é máximo? Por que? Este fluxo (f=3) é máximo? Por que? Fluxo máximo = 4

9 9Algoritmos em Grafos Problema do Fluxo Máximo Obter uma cadeia ligando S e P que, em conjunto com o arco de retorno (P,S) defina um ciclo : + : arcos de orientados como (P,S) - : arcos de orientados no sentido oposto a (P,S) 1 = min u + [c(u) – f(u)] (aumento possível nos arcos de + ) 2 = min u - [f(u)] (redução possível nos arcos de - ) Melhorar a solução (aumentar o fluxo) somando = min{ 1, 2 } aos fluxos nos arcos de + e subtraindo aos fluxos nos arcos de -. A inexistência de um caminho aumentante no grafo original não quer dizer que não seja possível aumentar o fluxo.

10 10Algoritmos em Grafos Exemplo: Problema do Fluxo Máximo SP a b 2, 4 1, 1 3, 3 0, 5 1, , 1 = 2 1 = 2 2 = 1 2 = 1 f(u)c(u) = 1 = X3X3 X0X0 1X1X X4X4

11 11Algoritmos em Grafos Nó x rótulo (x) Problema do Fluxo Máximo Algoritmo Procedimento de rotulação para obter um ciclo : Quantidade pela qual pode ser aumentado o fluxo de S a x seguindo uma cadeia cujo último arco é A(x) Rotulação direta: x marcado (x) com u = (x,y) f(u) < c(u) y não marcado (y) = min { (x), c(u)-f(u) } xy u (x) A(y) = u

12 12Algoritmos em Grafos Problema do Fluxo Máximo Rotulação inversa: x marcado (x) arco u = (y,x) f(u) > 0 y não marcado (y) = min { (x), f(u) } xy u (x) A(y) = u f(u) 0 u ROTULAR(f,,A,Y) Enquanto > 0 faça ALTERAR_FLUXOS(f,,A) ROTULAR(f,,A,Y) fim-enquanto

13 13Algoritmos em Grafos Problema do Fluxo Máximo ROTULAR(f,,A,Y), (S) + Y {S} Enquanto P Y e > 0 faça Se u =(x,y): x Y, y Y e f(u) < c(u) então Y Y {y} A(y) u (y) min { (x), c(u)-f(u)} Senão Se u =(y,x): x Y, y Y e f(u) > 0 então Y Y {y} A(y) u (y) min { (x), f(u)} Senão 0 fim-enquanto Se P Y então (P) FIM-ROTULAR

14 14Algoritmos em Grafos Problema do Fluxo Máximo ALTERAR_FLUXOS(f,,A) x P f(P,S) f(P,S) + Enquanto x S faça u A(x) Se x = T(u) então f(u) f(u) + x I(u) Senão f(u) f(u) - x T(u) fim-enquanto FIM-ALTERAR_FLUXOS

15 15Algoritmos em Grafos Exemplo: Problema do Fluxo Máximo SP a b 2, 4 1, 1 3, 3 0, 5 1, 2 3, A(P) = (a,P) Y = {S, b, a, P} (P) = 1 (P) = 1 A(a) = (a,b) Y = {S, b, a} (a) = 1 (a) = 1 = 1 = 1 A(b) = (S,b) Y = {S, b} (b) = 2 (b) = 2 A(S) = (P,S) Y = {S} (S) = + (S) = + f(S,b) = 3 f(a,b) = 0 f(a,P) = 1 f(b,P) = 3 f(S,a) = 1 f(P,S) = 4 4, 1, 5 0, 2 3, 4 Marcação:

16 16Algoritmos em Grafos Exemplo: Problema do Fluxo Máximo SP a b 1, 1 3, 3 = 0, P Y = 0, P Y Y = {S, b} (b) = 1 (b) = 1 4, 1, 5 0, 2 3, 4 Y = {S} (S) = + (S) = + FIM Marcação:

17 17Algoritmos em Grafos Exemplo: Problema do Fluxo Máximo A(7) = (6,7) Y = {1, 2, 6, 7} (7) = 15 (7) = 15 A(6) = (2,6) Y = {1, 2, 6} (6) = 15 (6) = 15 = 15 = 15 A(2) = (1,2) Y = {1, 2} (2) = 20 (2) = 20 A(1) = (7,1) Y = {1} (1) = + (1) = + f(6,7) = 15 f(2,6) = 15 f(1,2) = 15 f(7,1) = 15 15

18 18Algoritmos em Grafos Exemplo: Problema do Fluxo Máximo A(8) = (4,8) Y = {1, 3, 4, 8} (8) = 9 (8) = 9 A(4) = (3,4) Y = {1, 3, 4} (4) = 9 (4) = 9 = 8 = 8 A(3) = (1,3) Y = {1, 3} (3) = 10 (3) = 10 A(1) = (7,1) Y = {1} (1) = + (1) = + f(4,8) = 8 f(3,4) = 8 f(1,3) = 8 f(7,1) = A(7) = (8,7) Y = {1, 3, 4, 8, 7} (7) = 8 (7) = 8 f(8,7) =

19 19Algoritmos em Grafos Exemplo: Problema do Fluxo Máximo A(5) = (3,5) Y = {1, 2, 3, 5} (5) = 5 (5) = 5 A(3) = (2,3) Y = {1, 2, 3} (3) = 5 (3) = 5 = 5 = 5 A(2) = (1,2) Y = {1, 2} (2) = 5 (2) = 5 A(1) = (7,1) Y = {1} (1) = + (1) = + f(3,5) = 5 f(2,3) = 5 f(1,2) = 20 f(7,1) = A(7) = (5,7) Y = {1, 2, 3, 5, 7} (7) = 5 (7) = 5 f(5,7) =

20 Algoritmos em Grafos 20 Exemplo: Problema do Fluxo Máximo A(7) = (5,7) Y = {1, 3, 5, 7} (7) = 2 (7) = 2 A(5) = (3,5) Y = {1, 3, 5} (5) = 2 (5) = 2 = 2 = 2 A(3) = (1,3) Y = {1, 3} (3) = 2 (3) = 2 A(1) = (7,1) Y = {1} (1) = + (1) = + f(5,7) = 7 f(3,5) = 7 f(1,3) = 10 f(7,1) =

21 21Algoritmos em Grafos Exemplo: Problema do Fluxo Máximo Y = {1} (1) = + (1) = = 0, P Y = 0, P Y FIM

22 22Algoritmos em Grafos Problema do Fluxo Máximo Teorema do Corte Mínimo Um conjunto de arcos C é chamado de corte separando P de S se Y X com S Y e P Y tal que C = { u U: I(u) Y, T(u) Y } Um corte separando P de S corta qualquer caminho de S a P no grafo G = (X,U). Capacidade de um corte separando P de S: c(C) = u C c(u)

23 23Algoritmos em Grafos C = { (1,5), (2,4), (2,6), (S,3) } Y = { S, 1, 2 } Problema do Fluxo Máximo S P C = { (1,5), (2,4), (2,6) } Y = { S, 1, 2, 3} Exemplo:

24 24Algoritmos em Grafos f SP f PS S P Y Y Problema do Fluxo Máximo Teorema: f(P,S) c(C) fluxo viável f corte C

25 25Algoritmos em Grafos Problema do Fluxo Máximo Corolário: Quando o algoritmo de rotulação termina com um fluxo f sem que seja possível marcar o nó P, f é a solução ótima do problema de fluxo máximo de S a P. P Y f(u) = c(u), senão a extremidade u estaria marcada P Y f(u) = c(u), senão a extremidade u estaria marcada u T(u) u I(u) YY f(u) = 0, senão a extremidade u estaria marcada f(u) = 0, senão a extremidade u estaria marcada YY

26 26Algoritmos em Grafos Problema do Fluxo Máximo Corolário: Se as capacidades são inteiras, então o algoritmo de Ford e Fulkerson obtém em um número finito de iterações uma solução ótima do problema de fluxo máximo.

27 27Algoritmos em Grafos Problema do Fluxo Máximo Teorema: P O valor do fluxo máximo é igual à capacidade do corte mínimo separando P de S. Ao final do procedimento de rotulação: f SP = f PS + f*(P,S) f PS = 0 f SP = c(C) f*(P,S) = c(C) f(P,S) c(C) corte é mínimo. f*(P,S) S P YY f SP f PS

28 28Algoritmos em Grafos Exemplo: Problema do Fluxo Máximo Y = {1} (1) = + (1) = = 0, P Y = 0, P Y FIM Corte mínimo Capacidade = 30 Fluxo máximo = 30


Carregar ppt "Algoritmos em Grafos Celso C. Ribeiro Caroline T. Rocha."

Apresentações semelhantes


Anúncios Google