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

4. Algoritmos gulosos 1 V ′ := {v} para um v ∈ V 2 ET := ∅ 3 while V ′ = V do 4 e s c o l h e e = {u, v} com custo mínimo 5 e n t r e V ′ e V \ V ′ (com u ∈ V ′ ) 6 V ′ := V ′ ∪ {v} 7 ET := ET ∪ {e} 8 end while AEM: Algoritmo de Kruskal Algoritmo 4.3 (AEM-Kruskal) Entrada Um grafo conexo não-orientado G = (V, EG) com pesos c : VG → R + Saída Uma árvore T = (V, ET ) com custo c(e) mínimo. e∈ET 1 ET := ∅ 2 while (V, ET ) não é conexo do 3 e s c o l h a e com custo mínimo que não produz c í c l o 4 ET := ET ∪ {e} 5 end while Exemplo 4.3 Resultado dos algoritmos de Prim e Kruskal para Polinésia Francesa: O mesmo! ♦ 82

Implementação do algoritmo de Prim 4.2. Algoritmos em grafos • Problema: Como manter a informação sobre a distância mínima de forma eficiente? • Mantenha uma distância do conjunto V ′ para cada nó em V \ V ′ . • Nós que não são acessíveis em um passo têm distância ∞. • Caso um novo nó seja selecionado: atualiza as distâncias. Implementação do algoritmo de Prim • Estrutura de dados adequada: – Fila de prioridade Q de pares (e, v) (chave e elemento). – Operação Q. min() remove e retorna (e, c) com c mínimo. – Operação Q.atualiza(e, c ′ ) modifica a chave de e para v ′ caso v ′ é menor que a chave atual. • Ambas operações podem ser implementadas com custo O(log n). AEM: Algoritmo de Prim Algoritmo 4.4 (AEM-Prim) Entrada Um grafo conexo não-orientado G = (V, EG) com pesos c : VG → R + Saída Uma árvore T = (V, ET ) com custo c(e) mínimo. e∈ET 1 ET := ∅ 2 Q := {((v, u), c(v, u)) | u ∈ N(v)} { nós alcancáveis } 3 Q := Q ∪ {((u, u), ∞) | u ∈ V \ N(v) \ {v}} { nós restantes } 4 while Q = ∅ do 5 ((u, v), c) := Q. min() { (u, v) é arco mínimo } 6 for w ∈ N(v) do 7 Q.atualiza((v, w), c(v, w)) 8 end for 9 ET := ET ∪ {{u, v}} 10 end while 83

Implementação do algoritmo <strong>de</strong> Prim<br />

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

• Problema: Como manter a informação sobre a distância mínima <strong>de</strong><br />

forma eficiente?<br />

• Mantenha uma distância do conjunto V ′ para cada nó em V \ V ′ .<br />

• Nós que não são acessíveis em um passo têm distância ∞.<br />

• Caso um novo nó seja selecionado: atualiza as distâncias.<br />

Implementação do algoritmo <strong>de</strong> Prim<br />

• Estrutura <strong>de</strong> dados a<strong>de</strong>quada:<br />

– Fila <strong>de</strong> priorida<strong>de</strong> Q <strong>de</strong> pares (e, v) (chave e elemento).<br />

– Operação Q. min() remove e retorna (e, c) com c mínimo.<br />

– Operação Q.atualiza(e, c ′ ) modifica a chave <strong>de</strong> e para v ′ caso v ′ é<br />

menor que a chave atual.<br />

• Ambas operações po<strong>de</strong>m ser implementadas com custo O(log n).<br />

AEM: Algoritmo <strong>de</strong> Prim<br />

Algoritmo 4.4 (AEM-Prim)<br />

Entrada Um grafo conexo não-orientado G = (V, EG) com pesos c : VG →<br />

R +<br />

Saída Uma árvore T = (V, ET ) com custo <br />

c(e) mínimo.<br />

e∈ET<br />

1 ET := ∅<br />

2 Q := {((v, u), c(v, u)) | u ∈ N(v)} { nós alcancáveis }<br />

3 Q := Q ∪ {((u, u), ∞) | u ∈ V \ N(v) \ {v}} { nós restantes }<br />

4 while Q = ∅ do<br />

5 ((u, v), c) := Q. min() { (u, v) é arco mínimo }<br />

6 for w ∈ N(v) do<br />

7 Q.atualiza((v, w), c(v, w))<br />

8 end for<br />

9 ET := ET ∪ {{u, v}}<br />

10 end while<br />

83

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

Saved successfully!

Ooh no, something went wrong!