70
Análise e Síntese de Algoritmos Fluxos Máximos em Grafos CLRS, Cap. 26

Análise e Síntese de Algoritmos Fluxos Máximos em Grafos CLRS, Cap. 26

Embed Size (px)

Citation preview

Page 1: Análise e Síntese de Algoritmos Fluxos Máximos em Grafos CLRS, Cap. 26

Análise e Síntese de Algoritmos

Fluxos Máximos em Grafos CLRS, Cap. 26

Page 2: Análise e Síntese de Algoritmos Fluxos Máximos em Grafos CLRS, Cap. 26

2003/2004 Análise e Síntese de Algoritmos 2

Contexto

• Algoritmos elementares em grafos (CLR, Cap. 22)

• Árvores abrangentes de menor custo (CLR, Cap. 23)

• Caminhos mais curtos com fonte única (CLR, Cap. 24)

• Caminhos mais curtos entre todos os pares (CLR, Cap. 25)

• Fluxos máximos em grafos (CLR, Cap. 26)

Page 3: Análise e Síntese de Algoritmos Fluxos Máximos em Grafos CLRS, Cap. 26

2003/2004 Análise e Síntese de Algoritmos 3

Resumo

• Fluxos Máximos em Grafos– Motivação– Definições & Propriedades– Método de Ford-Fulkerson – Teorema do Fluxo Máximo Corte Mínimo– Análise do algoritmo genérico– Algoritmo de Edmonds-Karp– Análise do algoritmo de Edmonds-Karp– Emparelhamento Bipartido Máximo– Algoritmos baseados em Pré-Fluxos

• Fluxos de Custo Mínimo

Page 4: Análise e Síntese de Algoritmos Fluxos Máximos em Grafos CLRS, Cap. 26

2003/2004 Análise e Síntese de Algoritmos 4

Um Problema: fornecer água a Lisboa

• Pretende-se determinar qual o volume de água máximo (por segundo), que é possível fazer chegar a Lisboa a partir da Barragem do Castelo do Bode– Existe uma rede de condutas de água que permitem o envio

da água do Castelo do Bode para Lisboa– Cada conduta apresenta uma capacidade limite, de metros

cúbicos por segundo

– Encontrar um algoritmo eficiente para resolver este problema

Page 5: Análise e Síntese de Algoritmos Fluxos Máximos em Grafos CLRS, Cap. 26

2003/2004 Análise e Síntese de Algoritmos 5

Fluxos Máximos em Grafos

• Dado um grafo dirigido G=(V, E):– Com um vértice fonte s e um vértice destino t– Em que cada arco (u,v) é caracterizado por uma capacidade

não negativa c(u,v)• A capacidade de cada arco (u,v) indica o valor limite de

“fluxo” que é possível enviar de u para v através do arco (u,v)

– Pretende-se calcular o valor máximo de “fluxo” que é possível enviar do vértice fonte s para o vértice destino t, respeitando as restrições de capacidade dos arcos

• Exemplo

Page 6: Análise e Síntese de Algoritmos Fluxos Máximos em Grafos CLRS, Cap. 26

2003/2004 Análise e Síntese de Algoritmos 6

Fluxo Máximo em Grafos Aplicações

• Envio de materiais em rede de transportes– Petróleo ou gás– Água– Electricidade– Bytes– …

Page 7: Análise e Síntese de Algoritmos Fluxos Máximos em Grafos CLRS, Cap. 26

2003/2004 Análise e Síntese de Algoritmos 7

Fluxo Máximo em Grafos Aplicações

• Para redes de fluxo com múltiplas fontes e/ou destinos– Definir super-fonte que liga a todas as fontes– Definir super-destino ao qual ligam todos os destinos– Capacidades infinitas entre super-fonte e fontes, e entre

destinos e super-destino

Page 8: Análise e Síntese de Algoritmos Fluxos Máximos em Grafos CLRS, Cap. 26

2003/2004 Análise e Síntese de Algoritmos 8

Fluxo Máximo em Grafos Definições

• Uma rede de fluxo G = (V, E) é um grafo dirigido em que cada arco (u,v) tem capacidade c(u, v) 0 – Se (u,v) E, então c(u,v) = 0

• Dois vértices especiais: fonte s e destino t • Todos os vértices de G num caminho de s para t

– Grafo ligado, |E| |V| - 1

• Um fluxo G = (V, E) é uma função f : V V R tal que:– f(u, v) c(u, v) para u, v V (restrição de capacidade) – f(u, v) = - f(v, u) para u, v V (simetria) – para u V - { s, t }: (conservação de fluxo) 0v,uf

Vv

Page 9: Análise e Síntese de Algoritmos Fluxos Máximos em Grafos CLRS, Cap. 26

2003/2004 Análise e Síntese de Algoritmos 9

Fluxo Máximo em Grafos Definições

• Valor de um fluxo:

• Problema do Fluxo Máximo: – Dada rede de fluxo G com fonte s e destino t, calcular o

fluxo de valor máximo de s para t

• Exemplo:

Vv

v,sff

s

u

v

t

5/10

5/10

4/10

6/101/5

Valor do fluxo: 10Fluxo máximo: 20

Page 10: Análise e Síntese de Algoritmos Fluxos Máximos em Grafos CLRS, Cap. 26

2003/2004 Análise e Síntese de Algoritmos 10

Fluxo Máximo em Grafos Propriedades• Dados conjuntos de vértices X e Y:

• Rede de fluxo G = (V, E); f fluxo em G; X, Y, Z V:– f(X,X) = 0 (cancelamento de termos) – f(X,Y) = -f(Y,X)– Se X Y = :

• f(X Y,Z) = f(X,Z) + f(Y,Z) (expansão do somatório)• f(Z,X Y) = f(Z,X) + f(Z,Y) (expansão do somatório)

Xx Yy

y,xfY,Xf

Page 11: Análise e Síntese de Algoritmos Fluxos Máximos em Grafos CLRS, Cap. 26

2003/2004 Análise e Síntese de Algoritmos 11

Método de Ford-Fulkerson

• Definições:– Perspectiva– Redes residuais– Caminhos de aumento– Cortes em redes de fluxo

• Teorema do Fluxo Máximo Corte Mínimo

• Método de Ford-Fulkerson– Algoritmo– Complexidade

• Problemas de convergência

Page 12: Análise e Síntese de Algoritmos Fluxos Máximos em Grafos CLRS, Cap. 26

2003/2004 Análise e Síntese de Algoritmos 12

Método Genérico

Ford-Fulkerson-Method(G,s,t)inicializar fluxo f a 0while existe caminho de aumento p

aumentar fluxo f utilizando preturn f

Page 13: Análise e Síntese de Algoritmos Fluxos Máximos em Grafos CLRS, Cap. 26

2003/2004 Análise e Síntese de Algoritmos 13

Redes Residuais

• Dado G = (V, E), um fluxo f, e u,v V– capacidade residual de (u,v):

• Fluxo líquido adicional que é possível enviar de u para v– cf(u,v) = c(u,v) - f(u,v)

– rede residual de G:• Gf = (V, Ef), onde Ef = { (u,v) V V : cf(u,v) > 0 }

– Cada arco (residual) de Gf permite apenas fluxo líquido positivo

• Exemplo

Page 14: Análise e Síntese de Algoritmos Fluxos Máximos em Grafos CLRS, Cap. 26

2003/2004 Análise e Síntese de Algoritmos 14

Redes Residuais (Cont.)

• G = (V, E), f um fluxo, Gf rede residual; f’ fluxo em Gf

• Fluxo de soma f + f’ definido para cada par u,v V: (f + f’)(u,v) = f(u,v) + f’(u,v)

• Fluxo de soma é um fluxo com valor |f + f’| = |f| + |f’|– Propriedades de um fluxo são verificadas: restrição de

capacidade, simetria e conservação de fluxo• Obs: f’ é definido em Gf e é um fluxo

– Cálculo do valor de fluxo: 'ff

v,s'fv,sf

v,s'fv,sf

v,s'ff'ff

VvVv

Vv

Vv

Page 15: Análise e Síntese de Algoritmos Fluxos Máximos em Grafos CLRS, Cap. 26

2003/2004 Análise e Síntese de Algoritmos 15

Caminhos de Aumento

• Dado G = (V, E) e um fluxo f– caminho de aumento p:

• caminho simples de s para t na rede residual Gf

– capacidade residual de p:• cf(p) = min { cf(u,v) : (u,v) em p }

– cf(p) permite definir fluxo fp em Gf, |fp| = cf(p) > 0

– f’ = f + fp é um fluxo em G, com valor |f’| = |f| + |fp| > |f|

• Exemplos

Page 16: Análise e Síntese de Algoritmos Fluxos Máximos em Grafos CLRS, Cap. 26

2003/2004 Análise e Síntese de Algoritmos 16

Recapitular

• Fluxos Máximos em Grafos– Definições

• Capacidades (dos arcos)• Fluxos• Capacidades residuais• Redes residuais• Caminhos de aumento

– Para aumento de fluxo– Método de Ford-Fulkerson

Page 17: Análise e Síntese de Algoritmos Fluxos Máximos em Grafos CLRS, Cap. 26

2003/2004 Análise e Síntese de Algoritmos 17

A Seguir

• Fluxos Máximos em Grafos– Teorema do fluxo máximo corte mínimo– Método de Ford-Fulkerson

• Análise do algoritmo genérico– Algoritmo de Edmonds-Karp

Page 18: Análise e Síntese de Algoritmos Fluxos Máximos em Grafos CLRS, Cap. 26

2003/2004 Análise e Síntese de Algoritmos 18

Algoritmo de Ford-Fulkerson Básico

Ford-Fulkerson(G,s,t)foreach (u,v) E[G]

f[u,v] = 0f[v,u] = 0

while existe caminho de aumento p na rede residual Gf calcular cf(p) foreach (u,v) p

f[u,v] = f[u,v] + cf(p) // Incrementar valor do fluxof[v,u] = - f[u,v]

Page 19: Análise e Síntese de Algoritmos Fluxos Máximos em Grafos CLRS, Cap. 26

2003/2004 Análise e Síntese de Algoritmos 19

Cortes em Redes de Fluxo

• Um corte (S, T) de G = (V, E) é uma partição de V em S e T = V - S, tal que s S e t T – fluxo líquido do corte (S, T):

– capacidade do corte (S, T):

• Se G = (V, E) com fluxo f, então o fluxo líquido através de um corte (S, T) é f(S,T) = |f| – T = V - S; f(S,TS) = f(S,T) + f(S,S); f(S,T) = f(S,V) - f(S,S)– f(S,T) = f(S,V) - f(S,S) = f(S,V) = f(s,V) + f(S - s,V) = f(s,V) = |f|

• Obs: para u S - s, f(u, V) = 0

Su Tv

v,uc)T,S(c

Su Tv

v,uf)T,S(f

Page 20: Análise e Síntese de Algoritmos Fluxos Máximos em Grafos CLRS, Cap. 26

2003/2004 Análise e Síntese de Algoritmos 20

Cortes em Redes de Fluxo (Cont.)

• Qualquer valor de fluxo é limitado superiormente pela capacidade de qualquer corte de G– (S,T) qualquer corte, e f um fluxo:

Su TvSu Tv

)T,S(cv,ucv,ufT,Sff

S T

Page 21: Análise e Síntese de Algoritmos Fluxos Máximos em Grafos CLRS, Cap. 26

2003/2004 Análise e Síntese de Algoritmos 21

Fluxo Máximo Corte Mínimo

• Seja G = (V, E), com fonte s e destino t, e um fluxo f. Então as proposições seguintes são equivalentes:1. f é um fluxo máximo em G2. A rede residual G não contém caminhos de aumento

3. |f| = c(S,T) para um corte (S,T) de G

• 1. 2.– Admitir que f é fluxo máximo em G mas que Gf tem caminho de

aumento– Então é possível definir um novo fluxo f + fp com valor |f| + |fp| > |f|;

uma contradição

Page 22: Análise e Síntese de Algoritmos Fluxos Máximos em Grafos CLRS, Cap. 26

2003/2004 Análise e Síntese de Algoritmos 22

Fluxo Máximo Corte Mínimo (Cont.)

• 2. 3.– Gf sem caminhos de aumento

– S = { v V : existe caminho de s para v em Gf }; T = V - S; s S e t T

– Com u S e v T, temos f(u,v) = c(u,v), pelo que• |f| = f(S,T) = c(S,T)

• 3. 1.– Dado que |f| c(S,T), para qualquer corte (S,T) de G– Como |f| = c(S,T) (definido acima), então f é fluxo máximo

Page 23: Análise e Síntese de Algoritmos Fluxos Máximos em Grafos CLRS, Cap. 26

2003/2004 Análise e Síntese de Algoritmos 23

Análise do Algoritmo Básico

• Número de aumentos de fluxo pode ser elevado

• Fluxo máximo = 2000000– No pior caso: número de caminhos de aumento é 2000000

s

u

v

t

1000000

1000000

1000000

10000001

1000000

1000000

s

u

v

t

1000000

10000001

rede de fluxo caminho de aumento comcapacidade residual = 1

Page 24: Análise e Síntese de Algoritmos Fluxos Máximos em Grafos CLRS, Cap. 26

2003/2004 Análise e Síntese de Algoritmos 24

Análise de Algoritmo Básico (Cont.)

• Para valores racionais das capacidades– Converter todas as capacidades para valores inteiros– Número de caminhos de aumento limitado por valor máximo

do fluxo |f*|– Complexidade: O(E |f*|)

• Por exemplo: DFS para encontrar caminho de aumento

• Para valores irracionais das capacidades– Algoritmo básico pode não terminar– Algoritmo básico pode convergir para valor incorrecto– Exemplo

Page 25: Análise e Síntese de Algoritmos Fluxos Máximos em Grafos CLRS, Cap. 26

2003/2004 Análise e Síntese de Algoritmos 25

Algoritmo de Edmonds-Karp

• Escolher caminho de aumento mais curto no número de arcos– Utilizar BFS em Gf para identificar caminho mais curto– Complexidade: O(V E2)

• Exemplos

Page 26: Análise e Síntese de Algoritmos Fluxos Máximos em Grafos CLRS, Cap. 26

2003/2004 Análise e Síntese de Algoritmos 26

Recapitular

• Fluxos Máximos em Grafos– Definições– Método de Ford-Fulkerson– Teorema do fluxo máximo corte mínimo– Análise do algoritmo genérico de Ford-Fulkerson– Algoritmo de Edmonds-Karp

Page 27: Análise e Síntese de Algoritmos Fluxos Máximos em Grafos CLRS, Cap. 26

2003/2004 Análise e Síntese de Algoritmos 27

A Seguir

• Fluxos Máximos em Grafos– Algoritmo de Edmonds-Karp

• Análise da complexidade– Método de Ford-Fulkerson

• Análise do algoritmo genérico com valores irracionais– Complexidade do algoritmo– Convergência para valor correcto

Page 28: Análise e Síntese de Algoritmos Fluxos Máximos em Grafos CLRS, Cap. 26

2003/2004 Análise e Síntese de Algoritmos 28

Algoritmo de Edmonds-Karp — Análise

• Definições: f(s,v): distância mais curta de s para v na rede residual Gf f’(s,v): distância mais curta de s para v na rede residual Gf’

– Sequência de acontecimentos considerada:• f Gf BFS p f’ Gf’ BFS p’

• Resultados: f(s,v) cresce monotonicamente com cada aumento de fluxo – Número de aumentos de fluxo é O(V E)

– Tempo de execução é O(V E2) • O(E) devido a BFS & aumento de fluxo a cada passo

Page 29: Análise e Síntese de Algoritmos Fluxos Máximos em Grafos CLRS, Cap. 26

2003/2004 Análise e Síntese de Algoritmos 29

Algoritmo de Edmonds-Karp — Análise

f(s,v) cresce monotonicamente com cada aumento de fluxo– Prova por contradição– Após aumento de fluxo (de f para f’) existe v V tal que

distância do caminho mais curto diminui f’(s,v) < f(s,v)

– Sem perda de generalidade, admitir f’(s,v) < f’(s,u) para qualquer vértice u tal que f’(s,u) < f(s,u)

• i.e. escolher vértice v com a menor distância entre todos os vértices que não verificam a propriedade de f(s,v) crescer monotonicamente

• equivalente a: f’(s,u) < f’(s,v) implica que f(s,u) f’(s,u)

Page 30: Análise e Síntese de Algoritmos Fluxos Máximos em Grafos CLRS, Cap. 26

2003/2004 Análise e Síntese de Algoritmos 30

Algoritmo de Edmonds-Karp — Análise

– Seja p’ um caminho mais curto em Gf’, de s para v e com arco de u para v f’(s,u) = f’(s,v) - 1 (p’ é caminho mais curto em Gf’)

• E, por hipótese, f(s,u) f’(s,u)– Analisar fluxo f de u para v antes de aumento de fluxo

• Se f[u,v] < c[u,v]: f(s,v) f(s,u) + 1 f’(s,u) + 1 = f’(s,v)– o que contradiz hipótese inicial !

• Caso contrário f[u,v] = c(u,v):– (u,v) Ef

– caminho p em Gf (escolhido para obter Gf’) contém arco (v,u) f(s,u) = f(s,v) + 1 f(s,v) = f(s,u) - 1 f’(s,u) - 1 = f’(s,v) - 2 < f’(s,v)– o que também contradiz hipótese inicial !

Page 31: Análise e Síntese de Algoritmos Fluxos Máximos em Grafos CLRS, Cap. 26

2003/2004 Análise e Síntese de Algoritmos 31

Algoritmo de Edmonds-Karp — Análise

• Número de aumentos de fluxo é O(V E) – arco (u,v) na rede residual Gf é crítico se capacidade residual de p é

igual à capacidade residual do arco• arco crítico desaparece após aumento de fluxo

– Quantas vezes pode arco (u,v) ser arco crítico?• Como caminhos de aumento são caminhos mais curtos, f(s,v) = f(s,u) + 1

• (u,v) só volta à rede residual após arco (v,u) aparecer em caminho de aumento (com fluxo f ’)

– Como, f’(s,u) = f’(s,v) + 1

– Dado que, f(s,v) f’(s,v) (resultado anterior)

– Obtem-se, f’(s,u) = f’(s,v) + 1 f(s,v) + 1 = f(s,u) + 2

Page 32: Análise e Síntese de Algoritmos Fluxos Máximos em Grafos CLRS, Cap. 26

2003/2004 Análise e Síntese de Algoritmos 32

Algoritmo de Edmonds-Karp — Análise

– Distância de s a u aumenta pelo menos de duas unidades entre cada par de vezes que (u,v) é crítico

• No limite, distância de s a u é não superior a |V| - 2• Pelo que arco (u,v) pode ser crítico O(V) vezes• Existem O(E) pares de vértices• Na execução do algoritmo de Edmonds-Karp o número total

de vezes que arcos podem ser críticos é O(V E) • Como cada caminho de aumento tem um arco crítico

– Existem O(V E) caminhos de aumento

• Complexidade de Edmonds-Karp é O(V E2)– Complexidade de BFS é O(V+E) = O(E)– Aumento de fluxo em O(V+E) = O(E) (dado V = O(E))

Page 33: Análise e Síntese de Algoritmos Fluxos Máximos em Grafos CLRS, Cap. 26

2003/2004 Análise e Síntese de Algoritmos 33

Recapitular

• Fluxos Máximos em Grafos– Método de Ford-Fulkerson

• Análise do algoritmo genérico• Complexidade (valores inteiros): O(E |f*|)• Com valores irracionais pode não terminar

– Algoritmo de Edmonds-Karp• Análise da complexidade O(V E2)

Page 34: Análise e Síntese de Algoritmos Fluxos Máximos em Grafos CLRS, Cap. 26

2003/2004 Análise e Síntese de Algoritmos 34

A Seguir

• Fluxos Máximos em Grafos– Emparelhamento Bipartido Máximo

Page 35: Análise e Síntese de Algoritmos Fluxos Máximos em Grafos CLRS, Cap. 26

2003/2004 Análise e Síntese de Algoritmos 35

Emparelhamento Bipartido Máximo

• G = (V, E) não dirigido

• Emparelhamento: – M E, tal que para qualquer vértice v em V não mais do que um

arco em M é incidente em v

• Emparelhamento Máximo: – Emparelhamento cardinalidade máxima (na dimensão de M)

• Grafo Bipartido: – Grafo pode ser dividido em V = L R, em que L e R são

disjuntos e em que todos os arcos de E estão entre L e R

• Emparelhamento Bipartido Máximo:– Emparelhamento máximo em que G é bipartido

Page 36: Análise e Síntese de Algoritmos Fluxos Máximos em Grafos CLRS, Cap. 26

2003/2004 Análise e Síntese de Algoritmos 36

Emparelhamento Bipartido Máximo

• Construir G’:– V’ = V {s, t}

– Atribuir capacidade unitária a cada arco de E’

• Emparelhamento bipartido máximo em G equivale a encontrar fluxo máximo em G’

• Exemplo

Rv:t,vEv,u e ,Rv,Lu:v,u

Lu:u,s'E

Page 37: Análise e Síntese de Algoritmos Fluxos Máximos em Grafos CLRS, Cap. 26

2003/2004 Análise e Síntese de Algoritmos 37

Emparelhamento Bipartido Máximo

• Dados G e G’:1. Se M é um emparelhamento em G, existe um fluxo f de valor

inteiro em G’, com |f| = |M|2. Se |f| é um fluxo de valor inteiro em G’, existe um emparelhamento

M em G, com |f| = |M|

– Seja M um emparelhamento, e (u,v) M.• Definir f utilizando arcos de M, f(s,u) = f(u,v) = f(v,t) = 1.• Para restantes arcos (u,v) E’, f(u,v) = 0

– Os caminhos s u v t para todo o (u,v) M são disjuntos em termos dos vértices, com excepção de s e t

– Como existem |M| caminhos, cada um com uma contribuição de uma unidade de fluxo para o fluxo total f, |f| = |M|

Page 38: Análise e Síntese de Algoritmos Fluxos Máximos em Grafos CLRS, Cap. 26

2003/2004 Análise e Síntese de Algoritmos 38

Emparelhamento Bipartido Máximo

• Se todas as capacidades têm valor inteiro, então para fluxo máximo f, |f| é inteiro– Indução no número de iterações do algoritmo genérico de Ford-

Fulkerson

• Emparelhamento bipartido máximo |M| em G corresponde a |f|, em que f é o fluxo máximo de G’ – Se |M| é emparelhamento máximo em G, e |f| não é máximo em

G’, então existe f’ que é máximo– f’é inteiro, |f’| > |f|– e f’ corresponde a emparelhamento |M’|, com |M’| > |M|;

contradição– …

Page 39: Análise e Síntese de Algoritmos Fluxos Máximos em Grafos CLRS, Cap. 26

2003/2004 Análise e Síntese de Algoritmos 39

Emparelhamento Bipartido Máximo

• A aplicação do algoritmo genérico de Ford-Fulkerson tem complexidade O(E |f*|)

• Emparelhamento bipartido máximo é não superior a min(L,R) = O(V) e tem valor inteiro– i.e., no caso do emparelhamento máximo, |f*| = O(V)

• Complexidade de identificação do emparelhamento bipartido máximo é O(V E)

Page 40: Análise e Síntese de Algoritmos Fluxos Máximos em Grafos CLRS, Cap. 26

2003/2004 Análise e Síntese de Algoritmos 40

Recapitular

• Fluxos Máximos em Grafos– Definições e Propriedades– Método de Ford-Fulkerson– Algoritmo de Edmonds-Karp– Emparelhamento Bipartido Máximo

Page 41: Análise e Síntese de Algoritmos Fluxos Máximos em Grafos CLRS, Cap. 26

2003/2004 Análise e Síntese de Algoritmos 41

A Seguir

• Fluxos Máximos em Grafos– Algoritmos de Pré-Fluxo (push-relabel)– Correcção do algoritmo genérico– Análise do algoritmo genérico– Algoritmo Relabel-To-Front

• Análise do algoritmo Relabel-To-Front

Page 42: Análise e Síntese de Algoritmos Fluxos Máximos em Grafos CLRS, Cap. 26

2003/2004 Análise e Síntese de Algoritmos 42

Fluxo Máximo Utilizando Pré-Fluxos

• Motivação & Intuição• Operações Básicas• Algoritmo Genérico• Correcção do Método• Análise do Método

Page 43: Análise e Síntese de Algoritmos Fluxos Máximos em Grafos CLRS, Cap. 26

2003/2004 Análise e Síntese de Algoritmos 43

Pré-Fluxos — Intuição

• Operação mais localizada do que Ford-Fulkerson– Não identificar caminhos de aumento

• Propriedade da conservação de fluxo não é mantida durante execução do algoritmo

• Cada vértice u contém reservatório de fluxo– Representa excesso de fluxo e(u) – Começar por enviar todo o fluxo possível de s para vértices

adjacentes• Noção de altura de cada vértice, que evolui com

aplicação do algoritmo– Envio de fluxo só de vértices mais altos para vértices mais baixos – Fazer subir altura de vértices em caso de necessidade de envio

de fluxo

Page 44: Análise e Síntese de Algoritmos Fluxos Máximos em Grafos CLRS, Cap. 26

2003/2004 Análise e Síntese de Algoritmos 44

Pré-Fluxos — Definições

• Pré-Fluxo: f : V V R – Verifica restrições de capacidade, simetria e f(V, u) 0 para

vértices u V - { s }– Não verifica necessariamente conservação de fluxo

• Excesso de fluxo: e(u) = f(V, u) – u V - { s, t } transborda se e(u) > 0

• Uma função h : V N é uma função de alturas se h(s) = |V|, h(t) = 0, e h(u) h(v) + 1 para todo o arco residual (u,v) Ef – Função de alturas permite estabelecer condições para ser

possível enviar fluxo de u para v

Page 45: Análise e Síntese de Algoritmos Fluxos Máximos em Grafos CLRS, Cap. 26

2003/2004 Análise e Síntese de Algoritmos 45

Pré-Fluxos — Operações Básicas

Push(u,v)df(u,v) = min(e[u], cf[u,v])f[u,v] = f[u,v] + df(u,v)f[v,u] = - f[u,v]e[u] = e[u] - df(u,v)e[v] = e[v] + df(u,v)

Relabel(u)h[u] = 1 + min{h[v] : (u,v) Ef}

Aplica-se quando utransborda, e (u,v) Ef implica h[u] h[v]

Aplica-se quando utransborda, cf[u,v] > 0, e h[u] = h[v] + 1

Enviar fluxo de u para v:

Subir altura de u:

Page 46: Análise e Síntese de Algoritmos Fluxos Máximos em Grafos CLRS, Cap. 26

2003/2004 Análise e Síntese de Algoritmos 46

Pré-Fluxos — Operações Básicas

• Operação de envio de fluxo de u para v, Push(u, v):– Saturating push: arco (u, v) fica saturado após aplicação da

operação Push (i.e. f(u,v) = c(u,v))• Caso contrário: Nonsaturating push

– OBS: Após um Push(u, v) nonsaturating, u deixa de transbordar

Page 47: Análise e Síntese de Algoritmos Fluxos Máximos em Grafos CLRS, Cap. 26

2003/2004 Análise e Síntese de Algoritmos 47

Pré-Fluxos — Operações Básicas

Initialize-Prefow(G, s)foreach v V[G]

h[u] = 0e[u] = 0

foreach (u,v) E[G]f[u,v] = 0f[v,u] = 0

h[s] =|V[G]|foreach u Adj[s]

f[s,u] = c(s,u)f[u,s] = -c(s,u)e[u] = c(s,u)

contrário caso0

su seVuh

Page 48: Análise e Síntese de Algoritmos Fluxos Máximos em Grafos CLRS, Cap. 26

2003/2004 Análise e Síntese de Algoritmos 48

Pré-Fluxos — Algoritmo Genérico

Generic-Push-Relabel(G)Initialize-Preflow(G, s)while existe operação de Push ou Relabel aplicável

seleccionar e executar operação de Push ou Relabelreturn f

• Exemplo

Page 49: Análise e Síntese de Algoritmos Fluxos Máximos em Grafos CLRS, Cap. 26

2003/2004 Análise e Síntese de Algoritmos 49

Pré-Fluxos — Correcção do Método

• G = (V, E), rede de fluxo com fonte s e destino t, f um pré-fluxo, e h uma função de alturas para f. Se vértice u transborda, então u pode ser sujeito a uma operação de Relabel ou de Push– h é função de alturas, pelo que h(u) h(v) + 1 – Se operação de Push não aplicável a u, então para

qualquer arco residual (u, v), h(u) < h(v) + 1, pelo que h(u) h(v)

• Assim, operação de Relabel pode ser aplicada a u

Page 50: Análise e Síntese de Algoritmos Fluxos Máximos em Grafos CLRS, Cap. 26

2003/2004 Análise e Síntese de Algoritmos 50

Pré-Fluxos — Correcção do Método

• h[u] nunca decresce; se operação de Relabel é aplicada, h[u] aumenta de pelo menos 1 unidade– Valor de h[u] apenas alterado em Relabel– Aplicar Relabel se, para todo o (u, v) Ef, h[u] h[v]

• h[u] < 1 + min { h[v] : (u,v) Ef }

– Pelo que valor de h[u] aumenta (de pelo menos 1 unidade) após Relabel

Page 51: Análise e Síntese de Algoritmos Fluxos Máximos em Grafos CLRS, Cap. 26

2003/2004 Análise e Síntese de Algoritmos 51

Pré-Fluxos — Correcção do Método

• Durante a execução do algoritmo genérico o valor de h é mantido como função de alturas – Inicialmente h é uma função de alturas– Relabel(u) mantém h como função de alturas

• Arco (u, v) em Ef – h[u] h[v] + 1 após Relabel, pela definição de Relabel

• Arco (w, u) em Ef – h[w] h[u] + 1 antes de Relabel implica h[w] < h[u] + 1 após Relabel de

u– Push(u,v) mantém h como função de alturas

• (v, u) incluído em Ef – h[v] = h[u] - 1 (novo arco não afecta função de alturas)

• (u, v) removido de Ef – deixa de existir restrição em h devido a (u, v)

Page 52: Análise e Síntese de Algoritmos Fluxos Máximos em Grafos CLRS, Cap. 26

2003/2004 Análise e Síntese de Algoritmos 52

Pré-Fluxos — Correcção do Método

• Recapitular– G = (V, E), rede de fluxo com fonte s e destino t, f um pré-

fluxo, e h uma função de alturas para f. Se vértice u transborda, então u pode ser sujeito a uma operação de Relabel ou de Push

– h[u] nunca decresce; se operação de Relabel é aplicada, h[u] aumenta de pelo menos 1 unidade

– Durante a execução do algoritmo genérico valor de h é mantido como função de alturas

Page 53: Análise e Síntese de Algoritmos Fluxos Máximos em Grafos CLRS, Cap. 26

2003/2004 Análise e Síntese de Algoritmos 53

Pré-Fluxos — Correcção do Método

• Em Gf não existe caminho de s para t – Prova por contradição– Admitir caminho p = v0, v1, , vk de s para t em Gf, com v0=s

e vk=t• Podemos admitir p caminho simples, k < |V|

– i = 0, 1, …, k-1• (vi, vi+1) Ef, e h[vi] h[vi+1] + 1 (função de alturas)

– Pelo que, h[s] h[t] + k – Como h[t] = 0, então h[s] k < |V| – Mas h[s] = |V|; uma contradição !

Page 54: Análise e Síntese de Algoritmos Fluxos Máximos em Grafos CLRS, Cap. 26

2003/2004 Análise e Síntese de Algoritmos 54

Pré-Fluxos — Correcção do Método

• Se algoritmo genérico termina, o pré-fluxo calculado é o fluxo máximo para G– Inicialmente temos um pré-fluxo

• Devido a Initialize-Preflow– Algoritmo mantém a existência de pré-fluxo invariante

• Push e Relabel não alteram invariante– Se algoritmo termina, e[u] = 0 para qualquer vértice u

• Caso contrário poderia aplicar-se Push ou Relabel ! – Nesta situação, pré-fluxo é um fluxo

• Porque não existem vértices a transbordar ! – E não existe caminho de s para t na rede residual

• Porque h é função de alturas ! – Pelo teorema do fluxo máximo corte mínimo, f é o fluxo máximo !!

Page 55: Análise e Síntese de Algoritmos Fluxos Máximos em Grafos CLRS, Cap. 26

2003/2004 Análise e Síntese de Algoritmos 55

Pré-Fluxos — Análise do Método

• Para cada vértice u que transborda existe um caminho simples de u para s em Gf – OBS: Fluxo enviado tem de poder ser cancelado

• h[u] 2|V|-1 para u V– h[s] e h[t] são constantes – Relabel a u apenas aplicado quando vértice u transborda

• Existe caminho simples p de u para s– p = v0, v1, , vk, v0 = u, vk = s, k |V|-1

• h[vi] h[vi+1] + 1, i = 0, 1, …, k

• h[u] = h[v0] h[vk] + k h[s] + (|V|-1) = 2|V| - 1

Page 56: Análise e Síntese de Algoritmos Fluxos Máximos em Grafos CLRS, Cap. 26

2003/2004 Análise e Síntese de Algoritmos 56

Pré-Fluxos — Análise do Método

• O número de operações de Relabel é não superior a 2|V|-1 para cada vértice e a (2|V| - 1)(|V| - 2) < 2|V|2 no total– Relabel apenas pode ser aplicado a vértices em V - {s, t}, i.e. |

V|-2 vértices – Relabel faz subir valor de h[u] em pelo menos 1 unidade– Para u V - {s, t}, valores possíveis para h[u] entre 0 e 2|V|-1– Relabel aplicado a u não mais do que 2|V| - 1 vezes– Número total de operações de Relabel não superior a:

• (2|V| - 1)(|V| - 2) < 2|V|2

Page 57: Análise e Síntese de Algoritmos Fluxos Máximos em Grafos CLRS, Cap. 26

2003/2004 Análise e Síntese de Algoritmos 57

Pré-Fluxos — Análise do Método

• O número de saturating pushes é < 2|V||E| – Analisar saturating pushes de u para v e de v para u

• Após Push(u,v), Push(v,u) requer aumento em h[v] de pelo menos 2 unidades

• Análise da soma de valores de h[u] com h[v], h[u]+h[v]– Valor inicial é pelo menos 1 – Para último Push h[u]+h[v] (2|V|-1) + (2|V|-2) = 4|V|-3

» Número de valores possíveis é não superior a 4|V| - 3– Número de pushes é não superior a ((4|V|-3) -1)/2 + 1 = 2|V|-1

para o par de vértices u, v– Para todos os pares de vértices obtemos (2|V| - 1)|E| < 2|V||E|

Page 58: Análise e Síntese de Algoritmos Fluxos Máximos em Grafos CLRS, Cap. 26

2003/2004 Análise e Síntese de Algoritmos 58

Pré-Fluxos — Análise do Método

• O número de nonsaturating pushes é 4|V|2(|V|+|E|) – Seja X V o conjunto de vértices que transborda– Seja – Operação de Relabel(u) aumenta em menos de 2|V|

• Limitação da máxima altura possível para um vértice– Saturating push aumenta em menos de 2|V|

• Apenas um novo vértice pode ficar a transbordar e alturas não variam

– Nonsaturating push (u,v) decrementa em pelo menos 1• u deixa de transbordar; v pode passar a transbordar e h[v] -

h[u] = -1– O total de aumento de é < 2|V|(2|V|2) + 2|V|(2|V||E|) = 4|V|2(|V|

+|E|)

Xv vh

Page 59: Análise e Síntese de Algoritmos Fluxos Máximos em Grafos CLRS, Cap. 26

2003/2004 Análise e Síntese de Algoritmos 59

Pré-Fluxos — Análise do Método

– Como 0, número de nonsaturating pushes é menor do que 4|V|2(|V|+|E|)

• Número de operações elementares é O(V2E) – Utilizar resultados anteriores

• Número de operações limitado pelo número de nonsaturating pushes

• Complexidade do algoritmo genérico é O(V2E)– O(V) para operação Relabel (calcular novo valor de h)– O(1) para operação Push (actualizar valores)

Page 60: Análise e Síntese de Algoritmos Fluxos Máximos em Grafos CLRS, Cap. 26

2003/2004 Análise e Síntese de Algoritmos 60

Algoritmo Relabel-To-Front

• Complexidade: O(V3)

• Descarga de um vértice u:– Enviar todo o fluxo em excesso para os vértices vizinhos de u

• Lista de vizinhos de u: N[u]– v em lista N[u] se: (u,v) E ou (v,u) E

• i.e. vértices para os quais um arco residual (u, v) pode existir– Primeiro vizinho: head[N[u]]– Próximo vizinho de u (a seguir a v): next-neighbor[v]

Page 61: Análise e Síntese de Algoritmos Fluxos Máximos em Grafos CLRS, Cap. 26

2003/2004 Análise e Síntese de Algoritmos 61

Algoritmo Relabel-To-Front

• Operação de descarga de um vértice:

Discharge (u)while e[u] > 0

v = current[u]if v = NIL

Relabel(u)current[u] = head[N[u]]

else if cf(u,v) > 0 and h[u] = h[v] + 1Push(u,v)

elsecurrent[u] = next-neighbor[v]

Page 62: Análise e Síntese de Algoritmos Fluxos Máximos em Grafos CLRS, Cap. 26

2003/2004 Análise e Síntese de Algoritmos 62

Algoritmo Relabel-To-Front

Relabel-To-Front(G, s, t)Initialize-Preflow(G, s)L = V - {s, t} por qualquer ordemforeach u V - {s, t}

current[u] = head[N[u]]u = head[L]while u NIL

oldh = h[u]Discharge(u)if h[u] > oldh

colocar u na frente da lista Lu = next[u]

return f

Page 63: Análise e Síntese de Algoritmos Fluxos Máximos em Grafos CLRS, Cap. 26

2003/2004 Análise e Síntese de Algoritmos 63

Análise de Relabel-To-Front

• Complexidade do ciclo principal: O(V3)– Não contabilizando o tempo de Discharge – Fase: tempo entre operações de relabel– Número de fases = número de operações de Relabel = O(V2)

• O(V2) para qualquer algoritmo de Pré-Fluxo– Cada fase consiste de O(V) execuções de Discharge

• Total de execuções de Discharge é O(V3)– Complexidade (sem contabilizar Discharge) é O(V3)

Page 64: Análise e Síntese de Algoritmos Fluxos Máximos em Grafos CLRS, Cap. 26

2003/2004 Análise e Síntese de Algoritmos 64

Análise de Relabel-To-Front

• Complexidade acumulada das operações de Discharge:– Operações Relabel:

• Complexidade: O(V E) para O(V2) operações de Relabel– Actualizações de current[u]:

• Executadas O(degree(u)) vezes após Relabel de u• Executadas O(V degree(u)) no total para cada vértice u

– (cada vértice pode ser sujeito a O(V) operações de relabel)– Total: O(V E)

– Operações Push: • Saturating pushes: O(V E)• Nonsaturating pushes:

– Limitado pelo número de operações Discharge, porque retorna após nonsaturating push, i.e. O(V3)

Page 65: Análise e Síntese de Algoritmos Fluxos Máximos em Grafos CLRS, Cap. 26

2003/2004 Análise e Síntese de Algoritmos 65

Análise de Relabel-To-Front

• Complexidade do algoritmo:– Complexidade (total) das operações de Discharge

O(V3) – Complexidade do algoritmo sem operações de Discharge

O(V3)

– Complexidade do algoritmo Relabel-To-Front: O(V3)

Page 66: Análise e Síntese de Algoritmos Fluxos Máximos em Grafos CLRS, Cap. 26

2003/2004 Análise e Síntese de Algoritmos 66

Fluxos de Custo Mínimo

• G = (V,E), com custos cij e capacidades uij para cada arco (i,j) E, e valor b(i) associado com cada i V – Calcular fluxo xij para cada arco (i,j)

– OBS: Fluxos xij são não negativos• Propriedade de simetria não considerada nesta formulação

Ej,iux0

Viibxx:a sujeito

xcxzminimizar

ijij

Ej,i:j Ei,j:jjiij

Ej,iijij

Page 67: Análise e Síntese de Algoritmos Fluxos Máximos em Grafos CLRS, Cap. 26

2003/2004 Análise e Síntese de Algoritmos 67

Fluxos de Custo Mínimo

• Problema genérico de optimização em grafos. É possível reduzir outros problemas em grafos ao problema de fluxos de custo mínimo– Exemplos:

• Caminhos Mais Curtos• Fluxo Máximo

Page 68: Análise e Síntese de Algoritmos Fluxos Máximos em Grafos CLRS, Cap. 26

2003/2004 Análise e Síntese de Algoritmos 68

Caminhos Mais Curtos com Fonte s

Ej,ix0

sVi1

si1Vxx

:a sujeito

xcminimizar

ij

Ej,i:j Ei,j:jjiij

Ej,iijij

uij = xij: fluxo entre vértices i e j

Enviar uma unidade defluxo de s para cada umdos restantes vértices

Fluxo que sai de s é |V|-1

Cada vértice recebe uma unidade de fluxo

cij: peso do arco i,j

Admitir todos os vérticesatingíveis a partir de s

Page 69: Análise e Síntese de Algoritmos Fluxos Máximos em Grafos CLRS, Cap. 26

2003/2004 Análise e Síntese de Algoritmos 69

Fluxos Máximos

Ej,iux0

t,sVi0xx:a sujeito

xminimizar

ijij

Ej,i:j Ei,j:jjiij

Ei,ssi

csi = -1cji = 0, j s

xij: fluxo entre i e j

conservação de fluxo

simétrico do fluxo enviadode s para V - {s, t}

Page 70: Análise e Síntese de Algoritmos Fluxos Máximos em Grafos CLRS, Cap. 26

2003/2004 Análise e Síntese de Algoritmos 70

Revisão

• Fluxos Máximos em Grafos– Definições & Propriedades– Método de Ford-Fulkerson – Teorema do Fluxo Máximo Corte Mínimo– Análise do algoritmo genérico– Algoritmo de Edmonds-Karp– Análise do algoritmo de Edmonds-Karp– Emparelhamento Bipartido Máximo– Algoritmos baseados em Pré-Fluxos

• Fluxos de Custo Mínimo

• A seguir:– Emparelhamento de caracteres (CLR, Cap. 32)