Algoritmos e complexidade Notas de aula - Arquivo Escolar

Algoritmos e complexidade Notas de aula - Arquivo Escolar Algoritmos e complexidade Notas de aula - Arquivo Escolar

arquivoescolar.org
from arquivoescolar.org More from this publisher
13.04.2013 Views

9. Algoritmos em grafos 28 v := mate[u] 29 i f not mv then 30 Huv := true 31 U1 := U1 ∪ v 32 end i f 33 end for 34 end for 35 while ( not found ) 36 end Após da busca, podemos extrair um conjunto máximo de caminhos M-alternantes mínimos disjuntos. Enquanto existe um vértice livre em V2, nos extraimos um caminho alternante que termina em v como segue: 1 e x t r a c t p a t h (v ) := 2 P := v 3 while not (v ∈ V1 and v l i v r e ) do 4 i f v ∈ V1 5 v := mate [ v ] 6 else 7 v := e s c o l h e {u | Huv, uv ∈ M} 8 end i f 9 P := vP 10 end while 11 12 remove o caminho e todos v é r t i c e s sem p r e d e c e s s o r 13 end while 14 end Solução ponderada em grafos bi-partidos Dado um grafo G = (S . ∪ T, E) bipartido com pesos c : E → Q+ queremos achar um emparelhamento de maior peso. Escrevemos V = S ∪ T para o conjunto de todos vértice em G. Observação 9.9 O caso ponderado pode ser restrito para emparelhamentos perfeitos: caso S e T possuem cardinalidade diferente, podemos adicionar vértices, e depois completar todo grafo com arestas de custo 0. O problema de encontrar um emparelhamento perfeito máximo (ou mínimo) em grafos ponderados é conhecido pelo nome “problema de alocação” (ingl. assignment problem). ♦ Observação 9.10 A redução do teorema 9.6 para um problema de fluxo máximo não se aplica no caso ponderado. Mas, com a simplificação da observação 9.9, podemos 224

9.2. Emparelhamentos reduzir o problema no caso ponderado para um problema de fluxo de menor custo: a capacidade de todas arestas é 1, e o custo de transportação são os pesos das arestas. Como o emparelhamento é perfeito, procuramos um fluxo de valor |V |/2, de menor custo. ♦ O dual do problema 9.15 é a motivação para Definição 9.3 Um rotulamento é uma atribuição y : V → R+. Ele é viável caso yu + yv ≥ ce para todas arestas e = (u, v). (Um rotulamento viável é c-cobertura por vértices.) Uma aresta é apertada (ingl. tight) caso yu + yv = ce. O subgrafo de arestas apertadas é Gy = (V, E ′ , c) com E ′ = {e ∈ E | e apertada em y}. Pelo teorema forte de dualidade e o fato que a relaxação linear dos sistemas acima possui uma solução integral (ver observação 9.3) temos Teorema 9.11 (Egerváry [22]) Para um grafo bi-partido G = (S . ∪ T, E, c) com pesos não-negativos c : E → Q+ nas arestas, o maior peso de um emparelhamento perfeito é igual ao peso da menor c-cobertura por vértices. O método húngaro A aplicação de um caminho M-aumentante P = (v1v2 . . . v2n+1) resulta num emparelhamento de peso c(M) + i impar cvivi+1 − i par cvivi+1. Isso motiva a definição de uma árvore húngara ponderada. Para um emparelhamento M, seja HM o grafo direcionado com as arestas e ∈ M orientadas de T para S com peso le := we, e com as restantes arestas e ∈ E \ M orientadas de S para T com peso le := −we. Com isso a aplicação do caminho M-aumentante P produz um emparelhamento de peso c(M) − l(P ) em que l(P ) = 1≤i≤2n lvivi+1 é o comprimento do caminho P . Com isso podemos modificar o algoritmo para emparelhamentos máximos para Algoritmo 9.3 (Emparelhamento de peso máximo) Entrada Grafo não-direcionado ponderado G = (V, E, c). Saída Um emparelhamento de maior peso c(M). 1 M = ∅ 2 while ( e x i s t e um caminho M aumentante P ) do 3 encontra o caminho M aumentante mínimo P em HM 4 caso l(P ) ≥ 0 break ; 225

9. <strong>Algoritmos</strong> em grafos<br />

28 v := mate[u]<br />

29 i f not mv then<br />

30 Huv := true<br />

31 U1 := U1 ∪ v<br />

32 end i f<br />

33 end for<br />

34 end for<br />

35 while ( not found )<br />

36 end<br />

Após da busca, po<strong>de</strong>mos extrair um conjunto máximo <strong>de</strong> caminhos M-alternantes<br />

mínimos disjuntos. Enquanto existe um vértice livre em V2, nos extraimos um<br />

caminho alternante que termina em v como segue:<br />

1 e x t r a c t p a t h (v ) :=<br />

2 P := v<br />

3 while not (v ∈ V1 and v l i v r e ) do<br />

4 i f v ∈ V1<br />

5 v := mate [ v ]<br />

6 else<br />

7 v := e s c o l h e {u | Huv, uv ∈ M}<br />

8 end i f<br />

9 P := vP<br />

10 end while<br />

11<br />

12 remove o caminho e todos v é r t i c e s sem p r e d e c e s s o r<br />

13 end while<br />

14 end<br />

Solução pon<strong>de</strong>rada em grafos bi-partidos Dado um grafo G = (S . ∪ T, E)<br />

bipartido com pesos c : E → Q+ queremos achar um emparelhamento <strong>de</strong><br />

maior peso. Escrevemos V = S ∪ T para o conjunto <strong>de</strong> todos vértice em G.<br />

Observação 9.9<br />

O caso pon<strong>de</strong>rado po<strong>de</strong> ser restrito para emparelhamentos perfeitos: caso S<br />

e T possuem cardinalida<strong>de</strong> diferente, po<strong>de</strong>mos adicionar vértices, e <strong>de</strong>pois<br />

completar todo grafo com arestas <strong>de</strong> custo 0. O problema <strong>de</strong> encontrar um<br />

emparelhamento perfeito máximo (ou mínimo) em grafos pon<strong>de</strong>rados é conhecido<br />

pelo nome “problema <strong>de</strong> alocação” (ingl. assignment problem). ♦<br />

Observação 9.10<br />

A redução do teorema 9.6 para um problema <strong>de</strong> fluxo máximo não se aplica<br />

no caso pon<strong>de</strong>rado. Mas, com a simplificação da observação 9.9, po<strong>de</strong>mos<br />

224

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!