13.04.2013 Views

Algoritmos e complexidade Notas de aula - Arquivo Escolar

Algoritmos e complexidade Notas de aula - Arquivo Escolar

Algoritmos e complexidade Notas de aula - Arquivo Escolar

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

9.2. Emparelhamentos<br />

Sobre a implementação A seguir supomos que o conjunto<br />

.<br />

<strong>de</strong> vértices é<br />

V = [1, n] e um grafo G = (V, E) bi-partido com partição V1 ∪ V2. Po<strong>de</strong>mos<br />

representar um emparelhamento usando um vetor mate, que contém, para<br />

cada vértice emparelhado, o índice do vértice vizinho, e 0 caso o vértice é<br />

livre.<br />

O núcleo <strong>de</strong> uma implementação do algoritmo <strong>de</strong> Hopcroft e Karp é <strong>de</strong>scrito<br />

na observação 9.8: ele consiste em uma busca por largura até encontrar um ou<br />

mais caminhos M-alternantes mínimos e <strong>de</strong>pois uma fase que extrai do DAG<br />

<strong>de</strong>finido pela busca um conjunto máximo <strong>de</strong> caminhos disjuntos (<strong>de</strong> vértices).<br />

A busca por largura começa com todos vértices livres em V1. Usamos um<br />

vetor H para marcar os arcos que fazem parte do DAG <strong>de</strong>finido pela busca<br />

por largura2 e um vetor m para marcar os vértices visitados.<br />

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

2 for a l l v ∈ V do mv := false<br />

3 for a l l e ∈ E do He := false<br />

4<br />

5 U1 := {v ∈ V1 | v livre}<br />

6<br />

7 do<br />

8 { <strong>de</strong>termina vizinhos em U2 via arestas l i v r e s }<br />

9 U2 := ∅<br />

10 for a l l u ∈ U1 do<br />

11 mu := true<br />

12 for a l l uv ∈ E , uv ∈ M do<br />

13 i f not mv then<br />

14 Huv := true<br />

15 U2 := U2 ∪ v<br />

16 end i f<br />

17 end for<br />

18 end for<br />

19<br />

20 { <strong>de</strong>termina vizinhos em U1 via arestas emparelhadas }<br />

21 found := f a l s e { ao menos um caminho encontrado? }<br />

22 U1 := ∅<br />

23 for a l l u ∈ U2 do<br />

24 mu := true<br />

25 i f (u l i v r e ) then<br />

26 found := true<br />

27 else<br />

2 H, porque o DAG se chama árvore húngara na literatura.<br />

223

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

Saved successfully!

Ooh no, something went wrong!