Você está na página 1de 33

Introdução Árvores Geradoras Mı́nimas Algoritmo de Prim Algoritmo de Kruskal

Árvores Geradoras Mı́nimas

Prof. Gustavo Soares

Análise e Técnicas de Algoritmos

Slides adaptados de Prof. Dr. Leandro Balby Marinho 1 / 23 UFCG CEEI


Introdução Árvores Geradoras Mı́nimas Algoritmo de Prim Algoritmo de Kruskal

Roteiro

1. Introdução

2. Árvores Geradoras Mı́nimas

3. Algoritmo de Prim

4. Algoritmo de Kruskal

Slides adaptados de Prof. Dr. Leandro Balby Marinho 2 / 23 UFCG CEEI


Introdução Árvores Geradoras Mı́nimas Algoritmo de Prim Algoritmo de Kruskal

Introdução

I Projetar redes ou malhas de forma eficiente.


I Como interligar todos os pinos de uma placa com a menor
quantidade de cobre?
I Como interligar os tanques de abastecimento de água de
campina grande de modo a garantir o correto abastecimento
com custo mı́nimo?

Slides adaptados de Prof. Dr. Leandro Balby Marinho 2 / 23 UFCG CEEI


Introdução Árvores Geradoras Mı́nimas Algoritmo de Prim Algoritmo de Kruskal

Exemplo 1

Considere a malha rodoviária em Maine, EUA na ura abaixo. A única forma


de manter as estradas abertas no inverno é removendo a neve acumulada.
A secretaria de transportes quer limpar a menor quantidade de estradas, de
forma a haver sempre estradas conectando quaisquer duas cidades. Como
fazer isso?

Slides adaptados de Prof. Dr. Leandro Balby Marinho 3 / 23 UFCG CEEI


Introdução Árvores Geradoras Mı́nimas Algoritmo de Prim Algoritmo de Kruskal

Roteiro

1. Introdução

2. Árvores Geradoras Mı́nimas

3. Algoritmo de Prim

4. Algoritmo de Kruskal

Slides adaptados de Prof. Dr. Leandro Balby Marinho 4 / 23 UFCG CEEI


Introdução Árvores Geradoras Mı́nimas Algoritmo de Prim Algoritmo de Kruskal

Árvore Geradora
Uma árvore geradora de um grafo não-direcionado G = (V , E ) é
um subgrafo de G que é uma árvore e contém todos os vértices de
G.

Teorema 1: Um grafo é conexo se e somente se ele possui uma


árvore geradora (verifique).

Slides adaptados de Prof. Dr. Leandro Balby Marinho 4 / 23 UFCG CEEI


Introdução Árvores Geradoras Mı́nimas Algoritmo de Prim Algoritmo de Kruskal

Árvore Geradora
Um grafo pode ter várias árvores geradoras.

Slides adaptados de Prof. Dr. Leandro Balby Marinho 5 / 23 UFCG CEEI


Introdução Árvores Geradoras Mı́nimas Algoritmo de Prim Algoritmo de Kruskal

Encontrando uma Árvore Geradora

I Se o grafo G não tem ciclos, G é uma árvore geradora.


I Se G tem ciclo, é necessário remover recursivamente arestas
(até achar uma árvore), mantendo o grafo conexo.
I O DFS resolveria o problema? E quanto ao BFS?

Slides adaptados de Prof. Dr. Leandro Balby Marinho 6 / 23 UFCG CEEI


Introdução Árvores Geradoras Mı́nimas Algoritmo de Prim Algoritmo de Kruskal

Exemplo 2
A figura abaixo mostra a execução do DFS para encontrar a árvore
geradora do grafo abaixo.

Slides adaptados de Prof. Dr. Leandro Balby Marinho 7 / 23 UFCG CEEI


Introdução Árvores Geradoras Mı́nimas Algoritmo de Prim Algoritmo de Kruskal

Árvores Geradoras Mı́nimas (MST)

I Input: Grafo não-direcionado ponderado.


I Output: Árvore geradora com menor custo (soma das arestas).
I MST do grafo abaixo?

Slides adaptados de Prof. Dr. Leandro Balby Marinho 8 / 23 UFCG CEEI


Introdução Árvores Geradoras Mı́nimas Algoritmo de Prim Algoritmo de Kruskal

Árvores Geradoras Mı́nimas (MST)

I Input: Grafo não-direcionado ponderado.


I Output: Árvore geradora com menor custo (soma das arestas).
I MST do grafo abaixo?

Slides adaptados de Prof. Dr. Leandro Balby Marinho 8 / 23 UFCG CEEI


Introdução Árvores Geradoras Mı́nimas Algoritmo de Prim Algoritmo de Kruskal

Algoritmo Genérico (projeto greedy)

MST(G )
1 A=∅
2 while A 6= MST
3 ache uma aresta (u, v ) segura para A
4 A = A ∪ {(u, v )}
5 return A

I Invariante do laço: Antes de qualquer iteração, A ⊆ T onde T


é uma MST.
I Aresta segura: aresta de menor peso entre arestas disponı́veis.

Slides adaptados de Prof. Dr. Leandro Balby Marinho 9 / 23 UFCG CEEI


Introdução Árvores Geradoras Mı́nimas Algoritmo de Prim Algoritmo de Kruskal

Corte de um Grafo

I O corte de um grafo G = (V , E ) é uma partição de V em


dois conjuntos não vazios.

Slides adaptados de Prof. Dr. Leandro Balby Marinho 10 / 23 UFCG CEEI


Introdução Árvores Geradoras Mı́nimas Algoritmo de Prim Algoritmo de Kruskal

Corte de um Grafo

I O corte de um grafo G = (V , E ) é uma partição de V em


dois conjuntos não vazios.

I Quantos cortes pode ter um grafo de n vértices em geral?

Slides adaptados de Prof. Dr. Leandro Balby Marinho 10 / 23 UFCG CEEI


Introdução Árvores Geradoras Mı́nimas Algoritmo de Prim Algoritmo de Kruskal

Arestas Seguras em um Corte

A aresta segura é aquela de menor peso que cruza o corte.

Slides adaptados de Prof. Dr. Leandro Balby Marinho 11 / 23 UFCG CEEI


Introdução Árvores Geradoras Mı́nimas Algoritmo de Prim Algoritmo de Kruskal

Algoritmos para encontar MST

I Algoritmos são variações do genérico, com métodos diferentes


para encontrar a aresta segura.
I Prim (1957): A é uma única árvore, que cresce vértice a
vértice.
I Muito similar ao algoritmo de Dijkstra (1959).
I Descoberto em 1930 por Jarnik.

I Kruskal (1956): A é uma floresta de vértices e arestas.


I Custo similar: O(m log n)

Slides adaptados de Prof. Dr. Leandro Balby Marinho 12 / 23 UFCG CEEI


Introdução Árvores Geradoras Mı́nimas Algoritmo de Prim Algoritmo de Kruskal

Roteiro

1. Introdução

2. Árvores Geradoras Mı́nimas

3. Algoritmo de Prim

4. Algoritmo de Kruskal

Slides adaptados de Prof. Dr. Leandro Balby Marinho 13 / 23 UFCG CEEI


Introdução Árvores Geradoras Mı́nimas Algoritmo de Prim Algoritmo de Kruskal

Algoritmo de Prim

I Seja X o conjunto de vértices gerados pela MST.


I Inicia a partir de um vértice arbitrário e cresce até ter todos
em X .
I Encontra a aresta segura que liga vértices de X a um vértice
em V \ X .
I Caminha vértice a vértice.
I Sempre existe uma única árvore parcial.

Slides adaptados de Prof. Dr. Leandro Balby Marinho 13 / 23 UFCG CEEI


Introdução Árvores Geradoras Mı́nimas Algoritmo de Prim Algoritmo de Kruskal

Exemplo 3

Slides adaptados de Prof. Dr. Leandro Balby Marinho 14 / 23 UFCG CEEI


Introdução Árvores Geradoras Mı́nimas Algoritmo de Prim Algoritmo de Kruskal

Exemplo 3

Slides adaptados de Prof. Dr. Leandro Balby Marinho 14 / 23 UFCG CEEI


Introdução Árvores Geradoras Mı́nimas Algoritmo de Prim Algoritmo de Kruskal

Exemplo 3

Slides adaptados de Prof. Dr. Leandro Balby Marinho 14 / 23 UFCG CEEI


Introdução Árvores Geradoras Mı́nimas Algoritmo de Prim Algoritmo de Kruskal

Pseudocódigo

Prim(G , r )
1 for each u ∈ V [G ] I w (u, v ): peso da
2 key[u] = ∞ aresta (u, v ).
3 π[u] = NIL
4 key[r ] = 0 I key[v ] : peso mı́nimo
5 Q = V [G ] conectando o vértice
6 while Q 6= ∅ v a um vértice na
7 u = Extract-Min(Q) árvore.
8 for each v ∈ Adj[u] I Q fila de prioridade
9 if v ∈ Q and w (u, v ) < key[v ] (min-priority).
10 key[v ] = w (u, v )
11 π[v ] = u

Slides adaptados de Prof. Dr. Leandro Balby Marinho 15 / 23 UFCG CEEI


Introdução Árvores Geradoras Mı́nimas Algoritmo de Prim Algoritmo de Kruskal

Tempo de Execução

I Se Q for implementado por uma Min-Heap, inicialização


(linhas 1-5) é feita em O(n).
I O laço while é executado n vezes.
I O custo de Extract-Min é O(log n) e portanto o custo do
laço while é de O(n log n).
I A atribuição da linha 10 envolve, implicitamente, uma
operação Decrease-Key. Como cada Decrease-Key tem
custo O(log n) então:

Custo Total: O(n log n + m log n) = O(m log n)

Slides adaptados de Prof. Dr. Leandro Balby Marinho 16 / 23 UFCG CEEI


Introdução Árvores Geradoras Mı́nimas Algoritmo de Prim Algoritmo de Kruskal

Roteiro

1. Introdução

2. Árvores Geradoras Mı́nimas

3. Algoritmo de Prim

4. Algoritmo de Kruskal

Slides adaptados de Prof. Dr. Leandro Balby Marinho 17 / 23 UFCG CEEI


Introdução Árvores Geradoras Mı́nimas Algoritmo de Prim Algoritmo de Kruskal

Algoritmo de Kruskal

I Escolha a aresta de menor peso entre todas as arestas que não


conectam quaisquer dois vértices na MST.
I Proceda aresta por aresta, mesmo se não estiverem
relacionadas aos vértices em MST.
I A nova aresta não pode ligar vértices na mesma árvore (ciclo).
I Uma floresta pode existir antes da MST ter sido encontrada.

Slides adaptados de Prof. Dr. Leandro Balby Marinho 17 / 23 UFCG CEEI


Introdução Árvores Geradoras Mı́nimas Algoritmo de Prim Algoritmo de Kruskal

Exemplo 4

Slides adaptados de Prof. Dr. Leandro Balby Marinho 18 / 23 UFCG CEEI


Introdução Árvores Geradoras Mı́nimas Algoritmo de Prim Algoritmo de Kruskal

Exemplo 4

Slides adaptados de Prof. Dr. Leandro Balby Marinho 18 / 23 UFCG CEEI


Introdução Árvores Geradoras Mı́nimas Algoritmo de Prim Algoritmo de Kruskal

Exemplo 4

Slides adaptados de Prof. Dr. Leandro Balby Marinho 18 / 23 UFCG CEEI


Introdução Árvores Geradoras Mı́nimas Algoritmo de Prim Algoritmo de Kruskal

Conjuntos Disjuntos

I O algoritmo de Kruskal gera várias árvores disjuntas e realiza a


união passo a passo para produzir a MST.

I Vamos usar estruturas de dados Union-Find:


I Make-Set(x)
I cria um conjunto cujo único membro é x.
I x não está em nenhum outro.
I Union(x, y )
I une dois conjuntos disjuntos, onde estão x e y , resp.
I assume-se que x e y estão em conjuntos disjuntos.
I depois de unir, os conjuntos isolados são destruı́dos.

I Find-Set(x): retorna um identificador do conjunto que


contém x.

Slides adaptados de Prof. Dr. Leandro Balby Marinho 19 / 23 UFCG CEEI


Introdução Árvores Geradoras Mı́nimas Algoritmo de Prim Algoritmo de Kruskal

Pseudocódigo

Kruskal(G , r )
1 A=∅
2 for each v ∈ G [V ]
3 Make-Set(v )
4 ordene E em ordem crescente de pesos
5 for each (u, v ) da lista ordenada
6 if Find-Set(u) 6= Find-Set(v )
7 A = A ∪ {(u, v )}
8 Union(u, v )
9 return A

Slides adaptados de Prof. Dr. Leandro Balby Marinho 20 / 23 UFCG CEEI


Introdução Árvores Geradoras Mı́nimas Algoritmo de Prim Algoritmo de Kruskal

Complexidade

I Inicialização: O(n).
I Ordenação de arestas: O(m log m).
I Operações Union-Find: O(n log n).
I Custo Total: O(m log n)

Slides adaptados de Prof. Dr. Leandro Balby Marinho 21 / 23 UFCG CEEI


Introdução Árvores Geradoras Mı́nimas Algoritmo de Prim Algoritmo de Kruskal

Exercı́cio 1

Mostre a execução do algoritmo de Prim e Kruskal para o grafo


abaixo e mostre a árvore gerada.

Slides adaptados de Prof. Dr. Leandro Balby Marinho 22 / 23 UFCG CEEI


Introdução Árvores Geradoras Mı́nimas Algoritmo de Prim Algoritmo de Kruskal

Referências

Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest,


Clifford Stein. Introduction to Algorithms. The MIT Press, 2a
edição, 2001.

Slides adaptados de Prof. Dr. Leandro Balby Marinho 23 / 23 UFCG CEEI

Você também pode gostar