Escolar Documentos
Profissional Documentos
Cultura Documentos
Aula 13
Faculdade de Computação
Universidade Federal de Mato Grosso do Sul
Análise de Algoritmos
1 Motivação
2 Procedimento genérico
3 Algoritmo de Kruskal
4 Algoritmo de Prim
5 Exercícios
Aplicações
Formalização
é minimizado
I como T é um subgrafo acíclico de G, então T é uma árvore
I ademais, como T conecta todos os vértices V de G, então T é
uma árvore geradora
I chamamos o problema de determinar a árvore T de problema da
árvore geradora mínima
Exemplo
8 7
b c d
4 9
2
a 11 i 4 14 e
7 6
8 10
h g f
1 2
Exemplo
8 7
b c d
4 9
2
a 11 i 4 14 e
7 6
8 10
h g f
1 2
Ideia
Algoritmo genérico
Generic-MST(G, w)
01. A=∅
02. enquanto A não é uma árvore geradora
03. encontre uma aresta uv que é segura para A
04. A = A + uv
05. devolva A
Ideia geral
Ideia geral
Algoritmo
MST-Kruskal(G, w)
01. A=∅
02. para cada vértice v ∈ G.V
03. Make-Set(v)
04. arranje as arestas de G.E em ordem não descrescente de pesos
05. para cada aresta uv ∈ G.E, tomada em ordem não decrescente de peso
06. se Find-Set(u) , Find-Set(v)
07. A = A + uv
08. Union(u, v)
09. devolva A
Exemplo de execução
Exemplo de execução
Tempo de execução
Ideia geral
Ideia geral
Ideia geral
Algoritmo
MST-Prim(G, w, r)
01. para cada u ∈ G.V
02. u.key = ∞
03. u.π = nil
04. r.key = 0
05. Q = G.V
06. enquanto Q , ∅
07. u = Extract-Min(Q)
08. para cada v ∈ Adj[u]
09. se v ∈ Q and w(uv) < v.key
10. v.π = u
11. v.key = w(uv)
Exemplo de execução
Exercícios
23.1-1 Seja uv uma aresta de peso mínimo em um grafo G. Mostre que uv pertence a
alguma árvore geradora mínima de G.
23.1-5 Seja e uma aresta de peso máximo em algum circuito de um grafo conexo
G = (V, E). Prove que existe uma árvore geradora mínima de G0 = (V, E − e) que é
também uma árvore geradora de G. Isto é, existe uma árvore geradora mínima
de G que não inclui e.
23.1-7 Argumente que se todos os pesos das arestas de um grafo são positivos, então
qualquer subconjunto de arestas que conecta todos os vértices e tem peso total
mínimo deve ser uma árvore. Forneça um exemplo para mostrar que a mesma
conclusão não é válida se permitimos pesos não positivos.
Exercícios
23.1-8 Seja T uma árvore geradora mínima de um grafo G e seja L a lista ordenada dos
pesos das arestas de T. Mostre que para qualquer outra árvore geradora
mínima T0 de G, a lista L é também a lista ordenada dos pesos das arestas de
T0 .
23.2-1 O algoritmo de Kruskal pode devolver árvores geradoras diferentes para o
mesmo grafo de entrada G, dependendo de como os empates dos pesos das
arestas são resolvidos quando as arestas são ordenadas. Mostre que para cada
árvore geradora mínima T de G, existe uma forma de ordenar as arestas de G
no algoritmo de Kruskal tal que o algoritmo devolva T.
23.2-2 Suponha que o grafo G = (V, E) é representado como uma matriz de
adjacências. Descreva uma implementação simples do algoritmo de Prim com
essa representação e com tempo de execução O(V 2 ).
Exercícios
Problemas
(a)
Maybe-MST-A(G, w)
01. arranje as arestas em ordem decrescente dos seus pesos
02. T=E
03. para cada aresta e tomada em ordem descrescente de peso
04. se T − e é um grafo conexo
05. T = T−e
06. devolva T
Problemas
Maybe-MST-B(G, w)
01. T=∅
02. para cada aresta e tomada em uma ordem arbitrária
03. se T + e não tem circuitos
04. T = T+e
05. devolva T
Problemas
Maybe-MST-C(G, w)
01. T=∅
02. para cada aresta e tomada em uma ordem arbitrária
03. T = T+e
04. se T tem um circuito c
06. seja e0 uma aresta de peso máximo em c
06. T = T − e0
07. devolva T