1 / 70

Análise e Síntese de Algoritmos

Análise e Síntese de Algoritmos. Fluxos Máximos em Grafos CLRS, Cap. 26. 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 )

kenna
Télécharger la présentation

Análise e Síntese de Algoritmos

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  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) 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 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 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 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 • … 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 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) Análise e Síntese de Algoritmos

  9. u 4/10 5/10 s t 1/5 5/10 6/10 v 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: Valor do fluxo: 10 Fluxo máximo: 20 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) 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 Análise e Síntese de Algoritmos

  12. Método Genérico Ford-Fulkerson-Method(G,s,t) inicializar fluxo f a 0 while existe caminho de aumento p aumentar fluxo f utilizando p return f 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 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: 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 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 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 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] = 0 f[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 fluxo f[v,u] = - f[u,v] 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,TS) = 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 Análise e Síntese de Algoritmos

  20. S T 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: 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 G 2. 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 Análise e Síntese de Algoritmos

  22. Fluxo Máximo Corte Mínimo (Cont.) • 2.  3. • Gfsem 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 Análise e Síntese de Algoritmos

  23. u 1000000 1000000 u 1000000 1000000 s t 1 s t 1000000 1000000 1 v 1000000 1000000 v 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 caminho de aumento com capacidade residual = 1 rede de fluxo Análise e Síntese de Algoritmos

  24. Análise de Algoritmo Básico (Cont.) • Para valoresracionais 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 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 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 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 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 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) 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 ! 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 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)) 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) Análise e Síntese de Algoritmos

  34. A Seguir • Fluxos Máximos em Grafos • Emparelhamento Bipartido Máximo 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 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 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| 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 • … 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) 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 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 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 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 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 Análise e Síntese de Algoritmos

  45. Pré-Fluxos — Operações Básicas Enviar fluxo de u para v: 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) Aplica-se quando u transborda, cf[u,v] > 0, e h[u] = h[v] + 1 Subir altura de u: Aplica-se quando u transborda, e (u,v)  Ef implica h[u]  h[v] Relabel(u) h[u] = 1 + min{h[v] : (u,v)  Ef} 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 Análise e Síntese de Algoritmos

  47. Pré-Fluxos — Operações Básicas Initialize-Prefow(G, s) foreach v  V[G] h[u] = 0 e[u] = 0 foreach (u,v)  E[G] f[u,v] = 0 f[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) Análise e Síntese de Algoritmos

  48. Pré-Fluxos — Algoritmo Genérico • Exemplo 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 Relabel return f 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 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 Análise e Síntese de Algoritmos

More Related