grafos e teoria da complexidade fabio tirelo fluxos em redes

21
Grafos e Teoria da Complexidade Fabio Tirelo FLUXOS EM REDES FLUXOS EM REDES

Upload: terezinha-fialho-barreiro

Post on 07-Apr-2016

237 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Grafos e Teoria da Complexidade Fabio Tirelo FLUXOS EM REDES

Grafos e Teoria da ComplexidadeFabio Tirelo

FLUXOS EM FLUXOS EM REDESREDES

Page 2: Grafos e Teoria da Complexidade Fabio Tirelo FLUXOS EM REDES

GTC - Fabio TireloGTC - Fabio Tirelo

Fluxos em Redes Considere um material percorrendo um sistema

desde a origem, onde é produzido, até o destino, onde é consumido

Exemplos de fluxos: líquidos em tubulação, peças em linhas de montagem, corrente em redes elétricas, informações em redes

Exemplo: Fábrica em Vancouver (s) e depósito em Winnipeg (t)

s

v1

v2

t

v3

v4

16

13

10 4

12

14

9

20

4

7Vancouver Winnipeg

SaskatoonEdmonton

ReginaCalgary

Page 3: Grafos e Teoria da Complexidade Fabio Tirelo FLUXOS EM REDES

GTC - Fabio TireloGTC - Fabio Tirelo

Fluxos em Redes... Um Fluxo em Rede G = (V,E) é um grafo dirigido em

que cada aresta (u,v) E possui uma capacidade associada c(u,v) 0

Se (u,v) G, consideramos que c(u,v) = 0 Destacam-se os vértices: s, a origem, e t, o destino Por conveniência, consideramos que todos os outros

vértices estejam em algum caminho de s para t Um Fluxo em G é uma função f : V V , tal que

Restrição de capacidade: u,v : f (u,v) c(u,v) Simetria oblíqua: u,v : f (u,v) = f (v,u) Conservação de fluxo: para todo u V { s,t }

0),( Vv

vuf

Page 4: Grafos e Teoria da Complexidade Fabio Tirelo FLUXOS EM REDES

GTC - Fabio TireloGTC - Fabio Tirelo

Fluxos em Redes... O valor de um fluxo f é dado por:

O fluxo total positivo de entrada de um vértice v é dado por:

O fluxo total líquido de um vértice v é igual ao fluxo total positivo de saída de v menos o fluxo total positivo de entrada de v

Para quais vértices o fluxo total líquido pode ser diferente de zero?

Somatório implícito:

0),(

),(

vufVv

vuf

Vv

vff ),(s

Aa Bb

bafBAf ),(),(

Page 5: Grafos e Teoria da Complexidade Fabio Tirelo FLUXOS EM REDES

GTC - Fabio TireloGTC - Fabio Tirelo

Fluxos em Redes... Exemplo:

Redes com várias origens e vários destinos

s

v1

v2

t

v3

v4

11/16

8/13

101/4

12/12

11/14

4/9

15/20

4/4

7/7

s

s1

s3

tv3

v4

s2

Page 6: Grafos e Teoria da Complexidade Fabio Tirelo FLUXOS EM REDES

GTC - Fabio TireloGTC - Fabio Tirelo

Método de Ford-Fulkersen O método abaixo apresenta várias implementações

possíveis

Entrada: Grafo G = (V,E), vértices s e t Saída: Função de fluxo f Algoritmo:

iniciar fluxo f como 0Enquanto existir caminho de aumento p

façaampliar fluxo f ao longo de p

Retorna f

Page 7: Grafos e Teoria da Complexidade Fabio Tirelo FLUXOS EM REDES

GTC - Fabio TireloGTC - Fabio Tirelo

Redes Residuais e Caminhos de Aumento

Seja G = (V,E) um fluxo em redes e f um fluxo em G Uma rede residual consiste em arestas que podem admitir

mais fluxo A capacidade residual de (u,v) é a quantidade de fluxo

adicional que podemos enviar de u para v sem ultrapassar a sua capacidade:

A rede residual de G induzida por f é Gf = (V,Ef ), onde Ef = {(u,v) V V : cf (u,v) > 0}

Seja G = (V,E) um fluxo em redes e f um fluxo em G Um caminho de aumento p é um caminho simples de s

para t em Gf A capacidade residual de p é a capacidade máxima pela

qual podemos aumentar o fluxo em cada aresta de um caminho de ampliação: cf (p) = min{cf (u,v) : (u,v) p}

),(),(),( vufvucvuc f

Page 8: Grafos e Teoria da Complexidade Fabio Tirelo FLUXOS EM REDES

GTC - Fabio TireloGTC - Fabio Tirelo

Cortes de Fluxos em Redes Seja G = (V,E) um fluxo em redes e f um fluxo em G Um corte (S,T) de f é uma partição de V em S e T = VS

tal que s S e t T O fluxo líquido pelo corte (S,T) é igual a f (S,T) A capacidade do corte (S,T) é igual a c(S,T)

Exemplo: fluxo = 19, capacidade = 26

s

v1

v2

t

v3

v4

11/16

8/13

101/4

12/12

11/14

4/9

15/20

4/4

7/7

Page 9: Grafos e Teoria da Complexidade Fabio Tirelo FLUXOS EM REDES

GTC - Fabio TireloGTC - Fabio Tirelo

Fluxo Máximo e Corte Mínimo Seja G = (V,E) um fluxo em redes e f um fluxo em G As três condições a seguir são equivalentes:

f é um fluxo máximo em G A rede residual Gf não contém nenhum caminho

de aumento | f | = c(S,T) para algum corte (S,T) de T

s

v1

v2

t

v3

v4

16

13

10 4

12

14

9

20

4

7

Page 10: Grafos e Teoria da Complexidade Fabio Tirelo FLUXOS EM REDES

GTC - Fabio TireloGTC - Fabio Tirelo

Algoritmo Básico de Ford-Fulkersen

Para cada (u,v) E faça f [u,v] = 0; f [v,u] = 0Enquanto existir um caminho p de s para t em Gf faça

c = min { cf (u,v) : (u,v) p }

Para cada (u,v) p faça f [u,v] = f [u,v] + c;f [v,u] = f [u,v]

s

v1

v2

t

v3

v4

16

13

10 4

12

14

9

20

4

7

Page 11: Grafos e Teoria da Complexidade Fabio Tirelo FLUXOS EM REDES

GTC - Fabio TireloGTC - Fabio Tirelo

Fluxos em Redes e Matching Bipartido

O problema de encontrar o matching máximo em um grafo bipartido pode ser resolvido como fluxo em redes

s t

Page 12: Grafos e Teoria da Complexidade Fabio Tirelo FLUXOS EM REDES

GTC - Fabio TireloGTC - Fabio Tirelo

Algoritmo de Edmonds-Karp O algoritmo de Edmonds-Karp é uma melhoria do

algoritmo básico de Ford-Fulkersen Neste algoritmo, a busca por um caminho de

aumento é feita via busca em amplitude no grafo residual

Redução da complexidade de O(e | f |) para O(ne2) Caso interessante:

s t

v1

v2

1.000.000 1.000.000

1.000.000 1.000.000

1

Page 13: Grafos e Teoria da Complexidade Fabio Tirelo FLUXOS EM REDES

GTC - Fabio TireloGTC - Fabio Tirelo

Exercícios [CORMEN] 26.1-8 e 26.1- 9]

Enuncie o problema de fluxo máximo como um problema de programação linear

Dados: o mapa de um local com ruas e esquinas Uma esquina origem e uma destino Determinar o número de caminhos disjuntos de

arestas da origem para o destino

Page 14: Grafos e Teoria da Complexidade Fabio Tirelo FLUXOS EM REDES

GTC - Fabio TireloGTC - Fabio Tirelo

Exercício [CORMEN] 26-1 Dados: um grafo grade GRn e m pontos de partida Verificar se existem m caminhos disjuntos de

arestas desde os pontos de partida para pontos diferentes na borda

Page 15: Grafos e Teoria da Complexidade Fabio Tirelo FLUXOS EM REDES

GTC - Fabio TireloGTC - Fabio Tirelo

Algoritmos de Push-Relabel Seja G = (V,E) um fluxo em redes e f um fluxo em G O fluxo em excesso de um vértice u é dado por

e(u)=f(V,u) Um vértice u V {s,t} está transbordando se e(u) > 0 Um função de altura h deve possuir as seguintes

propriedades: h(s) = n, h(t) = 0 e h(u) h(v) + 1, para toda aresta residual (u,v) Ef

Pré-fluxo: não satisfaz a conservação de fluxo

Algoritmo genérico de Push-Relabel:INITIALIZE_PREFLOW(G,s)Enquanto existir empurrão ou elevação aplicável

selecione uma operação aplicável e execute-a

Page 16: Grafos e Teoria da Complexidade Fabio Tirelo FLUXOS EM REDES

GTC - Fabio TireloGTC - Fabio Tirelo

Algoritmos de Push-Relabel... Função INITIALIZE-PREFLOW(G,s):

Para todo vértice u V faça h[u] = 0; e[u] = 0Para toda aresta (u,v) E faça f [u,v] = 0, f [v,u] = 0h[s] = nPara todo vértice u adjacente a s faça

f [s,u] = c[s,u]; f [u,s] = c[s,u];e[u] = c[s,u]; e[s] = e[s] c[s,u]

Resultado da função: f [s,v] = c [s,v], para todo v f [u,s] = c [s,u], para todo u f [u,s] = 0, para u,v s

Page 17: Grafos e Teoria da Complexidade Fabio Tirelo FLUXOS EM REDES

GTC - Fabio TireloGTC - Fabio Tirelo

Algoritmos de Push-Relabel... A operação PUSH(u,v) pode aplicada quando u

está transbordando e, para h[u] = h[v] + 1 Ação: empurrar d = min { e[u], cf [u,v] } unidades de

fluxo de u para v

Função PUSH(u,v):d = min(e[u], cf [u,v])f [u,v] = f [u,v] + d; f [v,u] = f [u,v];e[u] = e[u] - d;e[v] = e[v] d;

Page 18: Grafos e Teoria da Complexidade Fabio Tirelo FLUXOS EM REDES

GTC - Fabio TireloGTC - Fabio Tirelo

Algoritmos de Push-Relabel... A operação RELABEL(u,v) pode aplicada quando u

está transbordando e h[u] h[v] para toda aresta (u,v) de Ef

Ação: aumentar a altura de u

Função RELABEL(u):h[u] = 1 + min{ h[v] : (u,v) Ef }

s t

v1

v2

1.000.000 1.000.000

1.000.000 1.000.000

1

Page 19: Grafos e Teoria da Complexidade Fabio Tirelo FLUXOS EM REDES

GTC - Fabio TireloGTC - Fabio Tirelo

Algoritmo de Relabel-to-Front Seja G = (V,E) um fluxo em redes e f um pré-fluxo em G

e h uma função de altura Uma aresta (u,v) é admissível se cf [u,v] > 0 e h[u]=h[v]

+ 1 Caso contrário, dizemos que a aresta é inadmissível A lista de vizinhos de u, N[u], é uma lista que contém os

vértices antecessores ou sucessores diretos de u O primeiro vértice de N[u] é designado por início[N[u]] O vértice que segue v em uma lista de vizinhos é

indicado por próximo[v]; se próximo[v] = null, então v é o último vértice da lista

atual [u] é definido como o vértice que está sendo atualmente considerado em N[u]

Page 20: Grafos e Teoria da Complexidade Fabio Tirelo FLUXOS EM REDES

GTC - Fabio TireloGTC - Fabio Tirelo

Algoritmo de Relabel-to-Front...

Algoritmo RELABEL-TO-FRONT(G,s,t):INITIALIZE-PREFLOW(G,s)L = V {s,t}Para cada u V {s,t} faça atual[u] = início[N[u]]u = início[L]Enquanto u null façaaltura-antiga = h[u];DISCHARGE(u);Se h[u] > altura-antiga entãomover u para a frente da lista Lu = próximo[u]

Page 21: Grafos e Teoria da Complexidade Fabio Tirelo FLUXOS EM REDES

GTC - Fabio TireloGTC - Fabio Tirelo

Algoritmo de Relabel-to-Front...

Função DISCHARGE(u):

Enquanto e[u] > 0 façav = atual[u];Se v == null entãoRELABEL(v);atual[u] = início[N[u]]Senão se cf [u,v] > 0 e h[u] == h[v] + 1 entãoPUSH(u,v)Senãoatual[u] = próximo[v]