Análise de Algoritmos
• Minimum Spanning Tree (MST)
▫
Árvore geradora mínima
▫
Árvore espalhada mínima
▫
Árvore de espalhamento mínima
www.nakamura.eti.br/eduardo Análise de Algoritmos 2
• Dado um grafo G=(V,E) não orientado conectado
▫
Uma árvore geradora deste grafo é uma árvore que conecta todos os vértices em V
▫
Um único grafo pode ter diferentes árvores geradoras
• Árvore geradora mínima
▫
Uma árvore geradora com peso menor ou igual a cada uma das outras árvores geradoras possíveis
www.nakamura.eti.br/eduardo Análise de Algoritmos 3
www.nakamura.eti.br/eduardo Análise de Algoritmos 4
A B
C D
E
5
4 1 2
1
2 7
www.nakamura.eti.br/eduardo Análise de Algoritmos 5
A B
C D
E
5
4 1 2
1
2 7
GENERIC-MST(G,w) 1: A ;
2: while A não conecta todos os vértices do 3: encontrar uma aresta (u,v) segura
4: A A {(u,v)};
5: end while 6: return A;
www.nakamura.eti.br/eduardo Análise de Algoritmos 6
Uma aresta tal que A {(u,v)} também é um subconjunto de uma árvore geradora mínima
• O algoritmo genérico é um algoritmo guloso
▫
Faz a escolha que é a melhor individualmente (em muitos problemas nem sempre será a melhor escolha global)
• Dois algoritmos importantes derivam do genérico
▫
Kruskal
▫
Prim
www.nakamura.eti.br/eduardo Análise de Algoritmos 7
• Deriva diretamente do algoritmo genérico
▫
Cria uma floresta (várias árvores)
▫
Acrescenta uma aresta segura que conecta duas árvores com o peso mínimo
www.nakamura.eti.br/eduardo Análise de Algoritmos 8
MST-KRUSKAL(G,w)
1: Crie uma floresta F onde cada vértice de G é uma árvore 2: Crie um conjunto S contendo todas as arestas do grafo 3: while S do
4: Remova uma aresta (u,v) com peso mínimo de S;
5: if (u,v) não cria ciclo then 6: Adicione (u,v) à floresta;
7: end if 8: end while 9: return F;
www.nakamura.eti.br/eduardo Análise de Algoritmos 9
www.nakamura.eti.br/eduardo Análise de Algoritmos 10
A
B C D
E
F G
H
I 4
11
8
8
2
6 7
1 2
4 7
14
9
10
www.nakamura.eti.br/eduardo Análise de Algoritmos 11
A
B C D
E
F G
H
I 4
11
8
8
2
6 7
1 2
4 7
14
9
10
www.nakamura.eti.br/eduardo Análise de Algoritmos 12
A
B C D
E
F G
H
I 4
11
8
8
2
6 7
1 2
4 7
14
9
10
www.nakamura.eti.br/eduardo Análise de Algoritmos 13
A
B C D
E
F G
H
I 4
11
8
8
2
6 7
1 2
4 7
14
9
10
www.nakamura.eti.br/eduardo Análise de Algoritmos 14
A
B C D
E
F G
H
I 4
11
8
8
2
6 7
1 2
4 7
14
9
10
www.nakamura.eti.br/eduardo Análise de Algoritmos 15
A
B C D
E
F G
H
I 4
11
8
8
2
6 7
1 2
4 7
14
9
10
www.nakamura.eti.br/eduardo Análise de Algoritmos 16
A
B C D
E
F G
H
I 4
11
8
8
2
6 7
1 2
4 7
14
9
10
www.nakamura.eti.br/eduardo Análise de Algoritmos 17
A
B C D
E
F G
H
I 4
11
8
8
2
6 7
1 2
4 7
14
9
10
www.nakamura.eti.br/eduardo Análise de Algoritmos 18
A
B C D
E
F G
H
I 4
11
8
8
2
6 7
1 2
4 7
14
9
10
www.nakamura.eti.br/eduardo Análise de Algoritmos 19
A
B C D
E
F G
H
I 4
11
8
8
2
6 7
1 2
4 7
14
9
10
www.nakamura.eti.br/eduardo Análise de Algoritmos 20
A
B C D
E
F G
H
I 4
11
8
8
2
6 7
1 2
4 7
14
9
10
www.nakamura.eti.br/eduardo Análise de Algoritmos 21
A
B C D
E
F G
H
I 4
11
8
8
2
6 7
1 2
4 7
14
9
10
www.nakamura.eti.br/eduardo Análise de Algoritmos 22
A
B C D
E
F G
H
I 4
11
8
8
2
6 7
1 2
4 7
14
9
10
www.nakamura.eti.br/eduardo Análise de Algoritmos 23
A
B C D
E
F G
H
I 4
11
8
8
2
6 7
1 2
4 7
14
9
10
www.nakamura.eti.br/eduardo Análise de Algoritmos 24
A
B C D
E
F G
H
I 4
11
8
8
2
6 7
1 2
4 7
14
9
10
www.nakamura.eti.br/eduardo Análise de Algoritmos 25
A
B C D
E
F G
H
I 4
8
2
1 2
4 7
9
• O algoritmo de Prim também é um caso especial do algoritmo genérico para árvore geradora mínima
• Diferente de Kruskal
▫
Prim mantém sempre uma única árvore
▫
A árvore começa de qualquer vértice como raíz
▫
Novas arestas são acrescidas até conectar todos os vértices
www.nakamura.eti.br/eduardo Análise de Algoritmos 26
MST-PRIM(G,w,r)
1: // Crie um grafo G’=(V’,S) com a raiz apenas;
2: V’ {r};
3: S ;
4: while V’ < V do
5: Selecione a menor aresta (u,v) tal que u V’ e v (V-V’) 6: V’ V’ {v};
7: S S {(u,v)};
8: end while 9: return G’;
www.nakamura.eti.br/eduardo Análise de Algoritmos 27
www.nakamura.eti.br/eduardo Análise de Algoritmos 28
A
B C D
E
F G
H
I 4
11
8
8
2
6 7
1 2
4 7
14
9
10
www.nakamura.eti.br/eduardo Análise de Algoritmos 29
A
B C D
E
F G
H
I 4
11
8
8
2
6 7
1 2
4 7
14
9
10
www.nakamura.eti.br/eduardo Análise de Algoritmos 30
A 4
11
8
8
2
6 7
1 2
4 7
14
9
10
B C D
E
F G
H
I
www.nakamura.eti.br/eduardo Análise de Algoritmos 31
A 4
11
8
8
2
6 7
1 2
4 7
14
9
10
B C D
E
F G
H
I
www.nakamura.eti.br/eduardo Análise de Algoritmos 32
A 4
11
8
8
2
6 7
1 2
4 7
14
9
10
B C D
E
F G
H
I
www.nakamura.eti.br/eduardo Análise de Algoritmos 33
A 4
11
8
8
2
6 7
1 2
4 7
14
9
10
B C D
E
F G
H
I
www.nakamura.eti.br/eduardo Análise de Algoritmos 34
A 4
11
8
8
2
6 7
1 2
4 7
14
9
10
B C D
E
F G
H
I
www.nakamura.eti.br/eduardo Análise de Algoritmos 35
A 4
11
8
8
2
6 7
1 2
4 7
14
9
10
B C D
E
F G
H
I
www.nakamura.eti.br/eduardo Análise de Algoritmos 36
A 4
11
8
8
2
6 7
1 2
4 7
14
9
10
B C D
E
F G
H
I
www.nakamura.eti.br/eduardo Análise de Algoritmos 37
A 4
11
8
8
2
6 7
1 2
4 7
14
9
10
B C D
E
F G
H
I
www.nakamura.eti.br/eduardo Análise de Algoritmos 38
A 4
8
2
1 2
4 7
9
B C D
E
F G
H
I
•
Suponha que todas as arestas de um grafo G=(V,E) não orientado possuam o mesmo peso. Quantas possibilidades de árvores geradoras mínimas existem?
•
Faça a análise de complexidade dos algoritmos de Kruskal e Prim.
•
Dado o problema oposto da árvore geradora mínima
(encontrar uma árvore geradora máxima), como você pode usar os algoritmos de Kruskal e Prim (sem alterá-los) para obter uma árvore?
•
Supondo que todas as arestas de um grafo G=(V,E) tenham o mesmo peso, escreva um algoritmo que encontre uma
árvore geradora mínima diferente de Kruskal e Prim. Qual sua complexidade?
www.nakamura.eti.br/eduardo Análise de Algoritmos 39