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

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

Celso C. Ribeiro Caroline T. Rocha

Apresentações semelhantes


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

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

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

3 Problema do Fluxo Máximo
Dados: Grafo G=(X,U) orientado u  U: capacidade c(u) 0 ≤ f(u) ≤ c(u) S P fonte sumidouro f 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ó. Algoritmos em Grafos

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

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

6 Problema do Fluxo Máximo
Exemplo: a c S P 2 3 1 1 e 1 2 7 5 b d Capacidades associadas aos nós: Como dar nome ao exemplo??? x 2 8 7 3 x1 2 8 x2 7 3 c(x) Algoritmos em Grafos

7 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  = minu[c(u)-f(u)] Algoritmos em Grafos

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

9 Problema do Fluxo Máximo
A inexistência de um caminho aumentante no grafo original não quer dizer que não seja possível aumentar o fluxo. 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= minu+ [c(u) – f(u)] (aumento possível nos arcos de +) 2= minu- [f(u)] (redução possível nos arcos de -) L+ e L-: não é ao contrário?? Melhorar a solução (aumentar o fluxo) somando  = min{1, 2} aos fluxos nos arcos de + e subtraindo  aos fluxos nos arcos de -. Algoritmos em Grafos

10 Problema do Fluxo Máximo
Exemplo: f(u) c(u) a - + 1 X 1, 1 0, 5 +1 X 0 1, 2 S P +1 -1 3, 3 2, 4 X 3 b +1 X 4 3,  1 = 2 2 = 1  = 1 Algoritmos em Grafos

11 Problema do Fluxo Máximo
Algoritmo Procedimento de rotulação para obter um ciclo : Nó x  rótulo (x) 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) } x y u (x) A(y) = u Algoritmos em Grafos

12 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) } x y u (x) A(y) = u f(u)  0 u ROTULAR(f,,A,Y) Enquanto  > 0 faça ALTERAR_FLUXOS(f,,A) fim-enquanto Algoritmos em Grafos

13 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)  min {(x), f(u)}   0 fim-enquanto Se P  Y então   (P) FIM-ROTULAR Algoritmos em Grafos

14 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 Algoritmos em Grafos

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

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

17 Problema do Fluxo Máximo
15 15 2 6 15 Exemplo: 15 20 4 15 5 5 7 1 12 8 6 8 10 8 3 4 8 9 12 15 (1) = + Y = {1} A(1) = (7,1) f(6,7) = 15 (2) = 20 Y = {1, 2} A(2) = (1,2) f(2,6) = 15 (6) = 15 Y = {1, 2, 6} A(6) = (2,6) f(1,2) = 15 (7) = 15 Y = {1, 2, 6, 7} A(7) = (6,7) f(7,1) = 15  = 15 Algoritmos em Grafos

18 Problema do Fluxo Máximo
15 15 2 6 15 Exemplo: 15 20 4 15 5 12 5 7 1 8 6 10 8 8 8 8 8 8 3 4 8 9 12 23 15 (1) = + Y = {1} A(1) = (7,1) f(8,7) = 8 (3) = 10 Y = {1, 3} A(3) = (1,3) f(4,8) = 8 (4) = 9 Y = {1, 3, 4} A(4) = (3,4) f(3,4) = 8 (8) = 9 Y = {1, 3, 4, 8} A(8) = (4,8) f(1,3) = 8 (7) = 8 Y = {1, 3, 4, 8, 7} A(7) = (8,7) f(7,1) = 23  = 8 Algoritmos em Grafos

19 Problema do Fluxo Máximo
15 15 2 6 15 20 Exemplo: 15 20 4 15 5 12 5 7 1 5 8 5 5 6 10 8 8 8 8 8 8 3 4 8 9 12 23 28 (1) = + Y = {1} A(1) = (7,1) f(5,7) = 5 (2) = 5 Y = {1, 2} A(2) = (1,2) f(3,5) = 5 (3) = 5 Y = {1, 2, 3} A(3) = (2,3) f(2,3) = 5 (5) = 5 Y = {1, 2, 3, 5} A(5) = (3,5) f(1,2) = 20 (7) = 5 Y = {1, 2, 3, 5, 7} A(7) = (5,7) f(7,1) = 28  = 5 Algoritmos em Grafos

20 Problema do Fluxo Máximo
15 15 2 6 20 Exemplo: 15 20 4 15 5 12 5 7 1 7 5 8 5 5 7 6 10 8 8 8 10 8 8 8 3 4 8 9 12 30 28 (1) = + Y = {1} A(1) = (7,1) f(5,7) = 7 (3) = 2 Y = {1, 3} A(3) = (1,3) f(3,5) = 7 (5) = 2 Y = {1, 3, 5} A(5) = (3,5) f(1,3) = 10 (7) = 2 Y = {1, 3, 5, 7} A(7) = (5,7) f(7,1) = 30  = 2 Algoritmos em Grafos

21 Problema do Fluxo Máximo
15 15 2 6 20 Exemplo: 15 20 4 15 5 12 5 7 1 7 8 5 7 6 10 8 8 8 10 8 8 3 4 8 9 12 30 (1) = + Y = {1}  = 0, P  Y FIM Algoritmos em Grafos

22 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) Algoritmos em Grafos

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

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

25 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. Y P  Y f(u) = c(u), senão a extremidade u estaria marcada u T(u) Y f(u) = 0, senão a extremidade u estaria marcada u I(u) Algoritmos em Grafos

26 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. Algoritmos em Grafos

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

28 Problema do Fluxo Máximo
15 15 2 6 20 Exemplo: 15 20 4 15 5 12 5 7 1 7 8 5 7 6 10 8 8 8 10 8 8 3 4 8 9 12 Corte mínimo Capacidade = 30 Fluxo máximo = 30 30 (1) = + Y = {1}  = 0, P  Y FIM Algoritmos em Grafos


Carregar ppt "Celso C. Ribeiro Caroline T. Rocha"

Apresentações semelhantes


Anúncios Google