ICMC USPSCC-216 Modelagem Computacional em Grafos
LAB 03 - Algoritmos de ordenao topolgicaProf. Dr. Alneu de Andrade Lopes - 1o sem. 2015
Alan Valejo [email protected]
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 faaEncontre 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
a
b c d
ei
h g f
4
8 7
9
10
21
8
11
7 6
2 4
14
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
a
b c d
ei
h g f
4
8 7
9
10
21
8
11
7 6
2 4
14
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
a
b c d
ei
h g f
4
8 7
9
10
21
8
11
7 6
2 4
14
Algoritmo de Prim
a
b c d
ei
h g f
4
8 7
9
10
21
8
11
7 6
2 4
14
Algoritmo de PrimAlgoritmo de Prim
a
b c d
ei
h g f
4
8 7
9
10
21
8
11
7 6
2 4
14
Algoritmo de PrimAlgoritmo de PrimAlgoritmo de Prim
a
b c d
ei
h g f
4
8 7
9
10
21
8
11
7 6
2 4
14
Algoritmo de PrimAlgoritmo de PrimAlgoritmo de PrimAlgoritmo de Prim
a
b c d
ei
h g f
4
8 7
9
10
21
8
11
7 6
2 4
14
Algoritmo de PrimAlgoritmo de PrimAlgoritmo de PrimAlgoritmo de PrimAlgoritmo de Prim
a
b c d
ei
h g f
4
8 7
9
10
21
8
11
7 6
2 4
14
Algoritmo de PrimAlgoritmo de PrimAlgoritmo de PrimAlgoritmo de PrimAlgoritmo de PrimAlgoritmo de Prim
a
b c d
ei
h g f
4
8 7
9
10
21
8
11
7 6
2 4
14
Algoritmo de PrimAlgoritmo de PrimAlgoritmo de PrimAlgoritmo de PrimAlgoritmo de PrimAlgoritmo de PrimAlgoritmo de Prim
a
b c d
ei
h g f
4
8 7
9
10
21
8
11
7 6
2 4
14
Algoritmo de PrimAlgoritmo de PrimAlgoritmo de PrimAlgoritmo de PrimAlgoritmo de PrimAlgoritmo de PrimAlgoritmo de Prim
a
b c d
ei
h g f
4
8 7
9
10
21
8
11
7 6
2 4
14
Algoritmo de PrimAlgoritmo de PrimAlgoritmo de PrimAlgoritmo de PrimAlgoritmo de PrimAlgoritmo de PrimAlgoritmo de Prim
a
b c d
ei
h g f
4
8 7
9
10
21
8
11
7 6
2 4
14
Algoritmo de PrimAlgoritmo de PrimAlgoritmo de PrimAlgoritmo de PrimAlgoritmo de PrimAlgoritmo de PrimAlgoritmo de PrimAlgoritmo de Prim
a
b c d
ei
h g f
4
8 7
9
10
21
8
11
7 6
2 4
14
Algoritmo de PrimAlgoritmo de PrimAlgoritmo de PrimAlgoritmo de PrimAlgoritmo de PrimAlgoritmo de PrimAlgoritmo de PrimAlgoritmo de Prim
a
b c d
ei
h g f
4
8 7
9
10
21
8
11
7 6
2 4
14
Algoritmo de PrimAlgoritmo de PrimAlgoritmo de PrimAlgoritmo de PrimAlgoritmo de PrimAlgoritmo de PrimAlgoritmo de PrimAlgoritmo de PrimAlgoritmo de Prim
a
b c d
ei
h g f
4
8 7
9
10
21
8
11
7 6
2 4
14
Algoritmo de Prim
Para Cada v in V Faa
custo[v] infinito
p[v] NULL
custo[r] 0
Q {(custo,V)}
A 0
Enquanto Q no vazio Faa
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
a
b c d
ei
h g f
4
8 7
9
10
21
8
11
7 6
2 4
14
Algoritmo de Kruskal
a
b c d
ei
h g f
4
8 7
9
10
21
8
11
7 6
2 4
14
Algoritmo de Kruskal
a
b c d
ei
h g f
4
8 7
9
10
21
8
11
7 6
2 4
14
Algoritmo de Kruskal
a
b c d
ei
h g f
4
8 7
9
10
21
8
11
7 6
2 4
14
Algoritmo de Kruskal
a
b c d
ei
h g f
4
8 7
9
10
21
8
11
7 6
2 4
14
Algoritmo de Kruskal
a
b c d
ei
h g f
4
8 7
9
10
21
8
11
7 6
2 4
14
Algoritmo de Kruskal
a
b c d
ei
h g f
4
8 7
9
10
21
8
11
7 6
2 4
14
Algoritmo de Kruskal
a
b c d
ei
h g f
4
8 7
9
10
21
8
11
7 6
2 4
14
Algoritmo de Kruskal
a
b c d
ei
h g f
4
8 7
9
10
21
8
11
7 6
2 4
14
Algoritmo de Kruskal
a
b c d
ei
h g f
4
8 7
9
10
21
8
11
7 6
2 4
14
Algoritmo de Kruskal
a
b c d
ei
h g f
4
8 7
9
10
21
8
11
7 6
2 4
14
Algoritmo de Kruskal
a
b c d
ei
h g f
4
8 7
9
10
21
8
11
7 6
2 4
14
Algoritmo de Kruskal
a
b c d
ei
h g f
4
8 7
9
10
21
8
11
7 6
2 4
14
Algoritmo de Kruskal
a
b c d
ei
h g f
4
8 7
9
10
21
8
11
7 6
2 4
14
Algoritmo de Kruskal
a
b c d
ei
h g f
4
8 7
9
10
21
8
11
7 6
2 4
14
Algoritmo de Kruskal
a
b c d
ei
h g f
4
8 7
9
10
21
8
11
7 6
2 4
14
Algoritmo de Kruskal
A
Algoritmo de Kruskal
A