Você está na página 1de 43

ICMC USP

SCC-216 Modelagem
Computacional em Grafos
LAB 03 - Algoritmos de ordenao topolgica
Prof. Dr. Alneu de Andrade Lopes - 1o sem. 2015

Alan Valejo

alan@icmc.usp.br

Introduo

Projetar redes de telecomunicao,


telefonia, televiso.
Projetar rodovias, ferrovias, etc.
Projetar redes de transmisso de
energia.
Projeto de redes de escoamento
Quero acessar todos os pontos com
menor custo possvel (tempo,
distancia, material)

rvore Geradora

Uma arvore geradora de um grafo no-direcionado


G de um grafo G um sub-grafo de G que contm
todos os seus vrtices e, ainda, uma rvore.

Uma rvore um grafo:

Conexo (existe caminho entre quaisquer dois de seus


vrtices)

Acclico (no possui ciclos)

rvore Geradora

rvore Geradora Mnima


(MST)

Assumir que G conexo e no contm


ciclos
Entrada: Um grafo conexo G com pesos
w(u,v) para cada aresta (u,v)
Sada: Um subgrafo gerador conexo
(rvore geradora) T de G cujo peso
total

seja o menor possvel

rvore Geradora Mnima


(MST)

rvore Geradora Mnima


(MST)

Veremos duas estratgias gulosas


para resolver o problema

Algoritmo Prim

Algoritmo Kruskal

rvore Geradora Mnima


(MST)

Um algoritmo genrico dado da seguinte forma:

A 0
Enquanto A no uma MST faa
Encontre uma aresta (v,u) segura

A A U {(v,u)}

Retorne A

Aresta segura se mantm a condio: antes de


cada iterao, A um sub-conjunto de alguma MST

Algoritmo de Prim

A uma rvore com raiz r

Inicialmente A vazio

O algoritmo considera um corte(C), no qual C um


conjunto de vrtices extremos em A
Encontrar uma aresta leve (v,u) no corte e
acrescentar ao conjunto A
8

d
9

4
2
a

11

8
h

14
10
g

Algoritmo de Prim

A uma rvore com raiz r

Inicialmente A vazio

O algoritmo considera um corte(C), no qual C um


conjunto de vrtices extremos em A
Encontrar uma aresta leve (v,u) no corte e
acrescentar ao conjunto A
8

d
9

4
2
a

11

8
h

14
10
g

Algoritmo de Prim

A uma rvore com raiz r

Inicialmente A vazio

O algoritmo considera um corte(C), no qual C um


conjunto de vrtices extremos em A
Encontrar uma aresta leve (v,u) no corte e
acrescentar ao conjunto A
8

d
9

4
2
a

11

8
h

14
10
g

Algoritmo de Prim

d
9

4
2
a

11

8
h

14
10
g

Algoritmo de Prim

d
9

4
2
a

11

8
h

14
10
g

Algoritmo de Prim

d
9

4
2
a

11

8
h

14
10
g

Algoritmo de Prim

d
9

4
2
a

11

8
h

14
10
g

Algoritmo de Prim

d
9

4
2
a

11

8
h

14
10
g

Algoritmo de Prim

d
9

4
2
a

11

8
h

14
10
g

Algoritmo de Prim

d
9

4
2
a

11

8
h

14
10
g

Algoritmo de Prim

d
9

4
2
a

11

8
h

14
10
g

Algoritmo de Prim

d
9

4
2
a

11

8
h

14
10
g

Algoritmo de Prim

d
9

4
2
a

11

8
h

14
10
g

Algoritmo de Prim

d
9

4
2
a

11

8
h

14
10
g

Algoritmo de Prim

d
9

4
2
a

11

8
h

14
10
g

Algoritmo de Prim
Enquanto Q no vazio Faa

Para Cada v in V Faa


custo[v] infinito
p[v] NULL
custo[r] 0

Q {(custo,V)}
A 0

v EXTRAIR_MIN(Q)*
A A U {v}
Para Cada u adjacente v Faa
Se u not in A e w(v,u) < custo[u] Ento
custo[u] w(v,u)
p[u] v
Retorne A = {(v,p[v])}
*Seleciona v in V-A, tal que custo de v
mnimo

Problema: Estrutura de dados eficiente para ordenas


os vrtices e seus custos.

Algoritmo de Kruskal

Utiliza o conceito de floresta

Uma coleo de rvores

Um grafo acclico mas no conexo, ele


dito uma floresta

Algoritmo de Kruskal

Escolha a aresta de menor peso entre todas as arestas que


no conectam quaisquer dois vrtices em A
Escolhe uma aresta de menor peso que liga vrtices de
rvores distintas
A nova aresta no pode ligar vrtices na mesma arvore
(ciclo)
Uma floresta pode existir antes da MST ter sido encontrada
8

d
9

4
2
a

11

8
h

14
10
g

Algoritmo de Kruskal

d
9

4
2
a

11
8
h

14
6

7
1

e
10

Algoritmo de Kruskal

d
9

4
2
a

11
8
h

14
6

7
1

e
10

Algoritmo de Kruskal

d
9

4
2
a

11
8
h

14
6

7
1

e
10

Algoritmo de Kruskal

d
9

4
2
a

11
8
h

14
6

7
1

e
10

Algoritmo de Kruskal

d
9

4
2
a

11
8
h

14
6

7
1

e
10

Algoritmo de Kruskal

d
9

4
2
a

11
8
h

14
6

7
1

e
10

Algoritmo de Kruskal

d
9

4
2
a

11
8
h

14
6

7
1

e
10

Algoritmo de Kruskal

d
9

4
2
a

11
8
h

14
6

7
1

e
10

Algoritmo de Kruskal

d
9

4
2
a

11
8
h

14
6

7
1

e
10

Algoritmo de Kruskal

d
9

4
2
a

11
8
h

14
6

7
1

e
10

Algoritmo de Kruskal

d
9

4
2
a

11
8
h

14
6

7
1

e
10

Algoritmo de Kruskal

d
9

4
2
a

11
8
h

14
6

7
1

e
10

Algoritmo de Kruskal

d
9

4
2
a

11
8
h

14
6

7
1

e
10

Algoritmo de Kruskal

d
9

4
2
a

11
8
h

14
6

7
1

e
10

Algoritmo de Kruskal

d
9

4
2
a

11
8
h

14
6

7
1

e
10

Algoritmo de Kruskal
A <- 0
E <- arestas em ordem crescente de peso
Para Cada (v,u) in E Faa
Se v e u em componentes distintos Ento
A A U {(v,u)}

Retorne A
Problema: Como verificar eficientemente
se v e u esto no mesmo componente?

Algoritmo de Kruskal
A <- 0
E <- arestas em ordem crescente de peso
Para Cada v in V Faa
MAKE_SET(v)

Para Cada (v,u) in E Faa


Se FIND_SET(v) diferente FIND_SET(u) Ento
A A U {(v,u)}
UNION(v,u)

Retorne A

Problema: Como verificar eficientemente


se v e u esto no mesmo componente?

Você também pode gostar