Você está na página 1de 25

Grafos – Árvores geradoras mínimas

Aula 13

Fábio Henrique Viduani Martinez

Faculdade de Computação
Universidade Federal de Mato Grosso do Sul

Análise de Algoritmos

Viduani Martinez (FACOM) Grafos – Árvores geradoras mínimas AA 1 / 24


Conteúdo da aula

1 Motivação

2 Procedimento genérico

3 Algoritmo de Kruskal

4 Algoritmo de Prim

5 Exercícios

Viduani Martinez (FACOM) Grafos – Árvores geradoras mínimas AA 2 / 24


Motivação

Aplicações

I no projeto de placas de circuitos eletrônicos, é importante que os


pinos de vários compontentes eletronicamente equivalentes
sejam conectados por fios de cobre
I para interconcetar um conjunto de n pinos, usamos um arranjo de
n − 1 fios, cada um contectando dois pinos
I de todos os arranjos possíveis, aquele que usa a menor extensão
de fios é em geral o mais desejável
I podemos modelar esse problema com um grafo conexo e não
orientado G = (V, E), onde V é o conjunto dos pinos, E é o
conjunto das possíveis interconexões entre pares de pinos e, para
cada aresta uv ∈ E, temos um peso associado w(uv)
especificando o custo (a/o quantidade/comprimento necessário/a
de fio) para conectar u e v

Viduani Martinez (FACOM) Grafos – Árvores geradoras mínimas AA 3 / 24


Motivação

Formalização

I queremos então encontrar um subconjunto T ⊆ E que conecta


todos os vértices em V e cujo peso total
X
w(T) = w(uv)
uv∈T

é 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

Viduani Martinez (FACOM) Grafos – Árvores geradoras mínimas AA 4 / 24


Motivação

Exemplo

8 7
b c d

4 9
2

a 11 i 4 14 e

7 6
8 10

h g f
1 2

Viduani Martinez (FACOM) Grafos – Árvores geradoras mínimas AA 5 / 24


Motivação

Exemplo

8 7
b c d

4 9
2

a 11 i 4 14 e

7 6
8 10

h g f
1 2

Viduani Martinez (FACOM) Grafos – Árvores geradoras mínimas AA 5 / 24


Procedimento genérico

Ideia

I seja G = (V, E) um grafo conexo e não orientado, com função peso


w: E → Q
I queremos encontrar uma árvore geradora mínima de G
I os algoritmos de Kruskal e Prim que veremos nesta aula usam a
estratégia gulosa para resolver o problema
I a estratégia gulosa geral é implementada por um algoritmo que
aumenta a árvore geradora mínima uma aresta por vez
I a cada passo, uma aresta uv é adicionada a um conjunto A tal
que A + uv é também um subconjunto de uma árvore geradora
mínima
I uma aresta como essa é chamada uma aresta segura para A

Viduani Martinez (FACOM) Grafos – Árvores geradoras mínimas AA 6 / 24


Procedimento genérico

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

Viduani Martinez (FACOM) Grafos – Árvores geradoras mínimas AA 7 / 24


Algoritmo de Kruskal

Ideia geral

I o algoritmo de Kruskal (1956) usa a seguinte regra para


determinar uma aresta segura na linha 3 do algoritmo
Generic-MST: o conjunto A é sempre uma floresta e a aresta
segura adicionada a A é sempre a aresta de menor peso no grafo
que conecta dois componentes distintos
I é um algoritmo guloso porque a cada passo adiciona uma aresta
de menor peso possível à floresta

Viduani Martinez (FACOM) Grafos – Árvores geradoras mínimas AA 8 / 24


Algoritmo de Kruskal

Ideia geral

I usa uma estrutura de dados para conjuntos disjuntos, onde cada


conjunto contém os vértices de uma árvore da floresta sendo
construída
I a operação Find-Set(u) devolve um representante do conjunto
que contém u
I então, podemos determinar se dois vértices u e v pertencem à
mesma árvore verificando se Find-Set(u) e Find-Set(v) são iguais
I a combinação das árvores é realizada pelo procedimento Union

Viduani Martinez (FACOM) Grafos – Árvores geradoras mínimas AA 9 / 24


Algoritmo de Kruskal

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

Viduani Martinez (FACOM) Grafos – Árvores geradoras mínimas AA 10 / 24


Algoritmo de Kruskal

Exemplo de execução

Viduani Martinez (FACOM) Grafos – Árvores geradoras mínimas AA 11 / 24


Algoritmo de Kruskal

Exemplo de execução

Viduani Martinez (FACOM) Grafos – Árvores geradoras mínimas AA 12 / 24


Algoritmo de Kruskal

Tempo de execução

I depende da implementação da estrutura de dados para conjuntos


disjuntos
I union-by-rank e path-compression são as estratégias de
implementação para essa estrutura de dados com tempo
assintoticamente mais rápido
I o tempo de execução do algoritmo de Kruskal é O(E lg V)

Viduani Martinez (FACOM) Grafos – Árvores geradoras mínimas AA 13 / 24


Algoritmo de Prim

Ideia geral

I o algoritmo de Prim (1957) usa a seguinte regra para determinar


uma aresta segura na linha 3 do algoritmo Generic-MST: o
conjunto A é sempre uma árvore única e a aresta segura
adicionada a A é sempre a aresta de menor peso no grafo que
conecta a árvore a um vértice que não está na árvore
I é um algoritmo guloso porque a árvore é aumentada, a cada
passo, com uma aresta que contribui com o menor peso possível
para o peso da árvore

Viduani Martinez (FACOM) Grafos – Árvores geradoras mínimas AA 14 / 24


Algoritmo de Prim

Ideia geral

I a chave para implementar o algoritmo de Prim eficientemente é


fazer com que seja fácil selecionar uma nova aresta a ser
adicionada à árvore formada pelas arestas em A
I o grafo G e a raiz r da árvore geradora mínima a ser aumentada
são entradas do algoritmo
I durante a execução do algoritmo, todos os vértices que não estão
na árvore estão armazenados em uma lista de min-prioridades Q

Viduani Martinez (FACOM) Grafos – Árvores geradoras mínimas AA 15 / 24


Algoritmo de Prim

Ideia geral

I para cada vértice v, a chave de v.key é o peso mínimo de


qualquer aresta que conecta v a um vértice na árvore
I o atributo v.π rotula o pai de v na árvore
I durante o algoritmo, o conjunto A do algoritmo Generic-MST é
mantido implicitamente como
n o
A = (v.π, v) : v ∈ V − r − Q

I quando o algoritmo termina a lista de min-prioridades está vazia

Viduani Martinez (FACOM) Grafos – Árvores geradoras mínimas AA 16 / 24


Algoritmo de Prim

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)

Tempo de execução: O(E lg V)

Viduani Martinez (FACOM) Grafos – Árvores geradoras mínimas AA 17 / 24


Algoritmo de Prim

Exemplo de execução

Viduani Martinez (FACOM) Grafos – Árvores geradoras mínimas AA 18 / 24


Exercícios

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.

Viduani Martinez (FACOM) Grafos – Árvores geradoras mínimas AA 19 / 24


Exercícios

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 ).

Viduani Martinez (FACOM) Grafos – Árvores geradoras mínimas AA 20 / 24


Exercícios

Exercícios

23.2-8 Professor Grushteniak propôs um novo algoritmo de divisão-e-conquista para


computar árvores geradoras mínimas como segue. Dado um grafo G = (V, E),
particione o conjunto de vértices V em dois conjuntos V1 e V2 tais que |V1 | e
|V2 | diferem de no máximo uma unidade. Seja E1 o conjunto de arestas que
incidem apenas nos vértices de V1 e seja E2 o conjunto de arestas que incidem
apenas nos vértices de V2 . Recursivamente, solucione o problema da árvore
geradora mínima sobre cada um dos dois subgrafos G1 = (V1 , E1 ) e
G2 = (V2 , E2 ). Finalmente, selecione a aresta de peso mínimo em E que tem
uma ponta em V1 e outra ponta em V2 e use essa aresta para unir as duas
árvores geradoras mínimas resultantes em uma única árvore geradora.
Argumente que o algoritmo computa corretamente uma árvore geradora mínima
de G ou forneça um exemplo para o qual o algoritmo falha.

Viduani Martinez (FACOM) Grafos – Árvores geradoras mínimas AA 21 / 24


Exercícios

Problemas

23-4 Algoritmos alternativos para árvore geradora mínima


Neste problema, são dados três algoritmos diferentes. Cada um recebe um
grafo conexo e uma função peso como entrada e devolve um conjunto de
arestas T. Para cada algoritmo, prove que T é uma árvore geradora mínima ou
prove que T não é necessariamente uma árvore geradora mínima. Discuta
também implementações eficientes de cada algoritmo.

(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

Viduani Martinez (FACOM) Grafos – Árvores geradoras mínimas AA 22 / 24


Exercícios

Problemas

23-4 Algoritmos alternativos para árvore geradora mínima


(b)

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

Viduani Martinez (FACOM) Grafos – Árvores geradoras mínimas AA 23 / 24


Exercícios

Problemas

23-4 Algoritmos alternativos para árvore geradora mínima


(c)

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

Viduani Martinez (FACOM) Grafos – Árvores geradoras mínimas AA 24 / 24