Escolar Documentos
Profissional Documentos
Cultura Documentos
INTRODUO...................................................................................2
1 ALGORITMO DE KRUSKAL......................................................3
1.1 rvore Mnima de Suporte (MST)..............................................3
1.2 Utilizando o MST..........................................................................4
1.3 Problema da rvore de Ligaes Mnimas.................................4
1.4 Algoritmo........................................................................................5
1.5 Melhorias no Algoritmo................................................................6
2 ALGORITMO DE DIJKSTRA.......................................................6
2.1 Funcionamento do Algoritmo.......................................................6
3 ALGORITMO DE PRIM..............................................................11
3.1 Algoritmo......................................................................................12
3.2 Outro Algoritmo..........................................................................14
4 ALGORITMO DE BELLMAN-FORD........................................15
4.1 Algoritmo......................................................................................15
5 ALGORITMO DE FLOYD-WARSHALL...................................16
5.1 Algoritmo......................................................................................17
CONCLUSO...................................................................................18
REFERNCIAS BIBLIOGRFICAS............................................19
2
INTRODUO
3
1 ALGORTMO DE KRUSKAL
Este algoritmo utiliza trs conjuntos e, t e vs. T usado para guardar as arestas da
rvore expandida. O algoritmo trabalha transformando uma floresta expandida de g em
uma nica rvore. O conjunto vs contm os conjuntos das rvores da floresta expandida.
Inicialmente vs contm todos os vrtices de g, onde cada vrtice um conjunto unitrio.
As arestas so escolhidas por ordem crescente de custo. Quando uma aresta une
duas sub-rvores da floresta expandida, estas so unidas em vs, quando no, ela
descartada, pois forma ciclo.
4
1.2 Utilizando o Mst
Dado um grafo conexo no orientado g, com peso positivo nas arestas (e r+),
encontrar uma rvore geradora de g de peso mnimo. Para resolver este problema acima o
algoritmo de Kruskal uma das opes, temos outras opes como o Prim e o Boruvka.
O algoritmo de Kruskal guloso. Como o nome sugere, estratgia usada por esse
algoritmo consiste na escolha da melhor soluo em determinados instantes. Isto , ele faz
uma escolha tima localmente esperando que esta escolha leve a uma soluo tima global.
Por vezes conduz a uma soluo tima, mas nem sempre isso ocorre.
1.4 Algoritmo
|V|
ucomp
achar(u)
vcomp
achar(v)
T U {e}
at |T| = n-1
retornar T
A complexidade do algoritmo pode ser analisada:
- Ordenao das arestas;
- Inicializao dos conjuntos disjuntos;
- Gasto para achar as arestas;
6
- Gasto para juno.
7
PERM, pois pode haver um caminho menor a partir de s, passando por current, do que
aquele que havia antes de current ser agregado a PERM. Se houver um caminho mais curto
precisamos tambm atualizar path[z] de forma a indicar que current o vrtice adjacente a
z pelo novo caminho mnimo.
Vejamos o funcionamento do algoritmo sob uma outra representao:
1) Defini-se inicialmente o n de origem (raiz), neste caso s, e inclui-se este n em
PERM (Figura 1). Atribui-se zero a sua distncia (dist[s]) porque o custo de ir de s
a s obviamente 0. Todos os outros ns i tem suas distncias (dist[i]) inicializadas
com um valor bastante grande ("infinito").
8
path[z] = s
Fim Se
10
11
12
Fig. 13: Representao do Algoritmo de Dijkstra
3 ALGORITMO DE PRIM
A caracterstica principal do algoritmo de Kruskal que ele seleciona a melhor
arestas sem se preocupar da conexo com as arestas selecionadas antes. O resultado uma
proliferao de rvores que eventualmente se juntam para formar uma rvore.
J que sabemos que no final temos que produzir uma rvore s, por que no tentar
fazer com que uma rvore cresa naturalmente at a obteno da rvore geradora mnima?
Assim, a prxima aresta selecionada seria sempre uma que se conecta arvore que j
existe. Isso a idia do algoritmo de Prim:
No incio o conjunto B contm um vrtice arbitrrio. A cada passo, o algoritmo
considere todas as arestas que tocam B e seleciona a de menor peso. Depois, o algoritmo
acrescenta em B o vrtice ligada por essa aresta que no estava em B. O processo continua
at que B contenha todos os vrtices de G.
3.1 Algoritmo
funo Prim(G = (N,A): grafo): conjunto de arestas
T := {}
B := Um vrtice de G
Enquanto B no contm todos os vrtices
(u,v) := aresta de menor peso tal que u V - B e v B
T := T U {(u,v)}
B := B U {u}
Retornar T
Para ilustrar, consideremos o grafo da figura 14, comeando arbitrariamente pelo vrtice a:
Passo
Incio
1
2
3
4
13
5
6
(g,d)
(f,g)
{a,b,c,d,e,g}
{a,b,c,d,e,f,g}
14
B, podemos utilizar duas tabelas de n elementos, uma indicando para cada vrtice o vrtice
de B que mais perto, uma outra que d a distncia at o vrtice de B que mais perto.
Seja mais_perto[1..n] e dist_mais_perto[1..n] essas duas tabelas, respectivamente.
Para um vrtice que j pertence a B, colocamos (-1) na entrada correspondente na tabela.
3.2 Outro Algoritmo
funo Prim(L = [1..n, 1..n]: grafo): conjunto de arestas
{Inicialmente consideramos que o vrtice 1 o nico elemento de B}
T := {}
Para i := 2 at n:
mais_perto[i] := 1
dist_mais_perto[i] := L[i,1]
Repetir n-1 vezes:
min :=
Para j := 2 at n:
Se 0 dist_mais_perto[j] < min ento
min := dist_mais_perto[j]
k := j
T := T U ((k,mais_perto[k])}
dist_mais_perto[k] := -1
Para j := 2 at n:
Se L[k,j] < dist_mais_perto[j] ento
dist_mais_perto[j] := L[k,j]
mais_perto[j] := k
Retornar T
Analisando esse algoritmo, conclui-se que ele tem um tempo de execuo em
O(n2). Qual o melhor entre esse algoritmo e o algoritmo de Kruskal? Se o grafo tem
15
muitas arestas, isto , ele tem um nmero de arestas que se aproxima de n(n-1), o tempo de
execuo com o algoritmo de Kruskal em O(n 2 lg n), portanto pior que o algoritmo de
Prim. Mas se o grafo esparso, o nmero de arestas se aproxima de n. Nesse caso, o
algoritmo de Kruskal est em O(n lg n) e o melhor. Na verdade, existem outros
algoritmos melhores no caso de grafo esparso.
4 ALGORITMO DE BELLMAN-FORD
O algoritmo de Bellman-Ford faz uso da mesma tcnica utilizada pelo algoritmo
de Dijkstra. Este algoritmo computa os caminhos mais curtos de um vrtice inicial de
origem a todos os demais, inclusive em grafos com pesos negativos. A nica restrio
que o grafo no possua nenhum circuito de peso negativo.
4.1 Algoritmo
Entrada: (1) Grafo G com pesos nas arestas; (2) Vrtice s de origem; (3) Matriz w de
pesos das arestas;
Sada: Caminho mais curto de s at todos os demais vrtices de G
para cada vrtice v V f aa
d[v]
fim para
d[s]
para i
1 at |V | - 1 faa
para cada aresta (u, v) E faa
se d[v] > d[u] + w(u, v) ento
d[v]
d[u] + w(u, v)
fim se
fim para
fim para
para cada aresta (u, v) E faa
se d[v] > d[u] + w(u, v) ento
16
retorne FALSO
fim se
fim para
retorne VERDADEIRO
Como j foi dito, se existir um circuito negativo, no poderemos garantir que os
caminhos encontrados nos grafos correspondem aos caminhos mais curtos. Ou seja, se
existirem arestas (u, v) tais que w(u, v) + d[u] < d[v], o algoritmo retorna FALSO. Esse
teste realizado pelo passo 12 do algoritmo. A complexidade de tempo do algoritmo de
Bellman-Ford
caminhos mais curtos para um grafo com arestas com peso positivo, o algoritmo de
Dijkstra nos d uma soluo mais eficiente. Se todas as arestas do grafo possuem peso
igual a 1, um algoritmo de busca em largura, que ser discutido mais adiante, o mais
indicado. Por fim, para encontrar os caminhos mais curtos entre todos os vrtices de um
grafo com pesos nas arestas, vamos apresentar o algoritmo de Floyd-Warshall.
5 ALGORITMO DE FLOYD-WARSHALL
Se todas as arestas de G so no negativas, podemos usar o algoritmo de Dijkstra, o
que nos d um algoritmo de complexidade O(|V |3). Se o algoritmo contm arestas de peso
negativo, mas sem circuitos de peso negativo, podemos usar o algoritmo de Bellman-Ford,
que nos d um algoritmo com complexidade de tempo O(|V |2|E|) ou O(|V |4), no caso de
grafos densos.
Para o algoritmo de Floyd-Warshall, vamos supor que temos uma matriz de pesos
wnn, tal que a posio w(i, j) da matriz de adjacncias armazena o peso da aresta i
j.
17
iterao, trocamos o caminho de i a j calculado durante a primeira iterao pelo caminho
de menor peso de i a j que, desta vez, pode passar pelos vrtices 1 e 2. Este caminho
determinado pela comparao entre w1(i, 2) + w1(2, j) e w1(i, j). O menor entre esses dois
valores ser w2(i, j). Durante a k-sima iterao, computamos:
wk(i, j) = min(wk-1(i, j), wk-1(i, k) + wk-1(k, j)) (2.1)
para determinar o caminho mais curto entre i e j que passa somente pelos vrtices 1, 2,..., k.
O caminho mais curto entre cada par de vrtices ser encontrado aps a n-sima
iterao. As posies w(k) ij em cada matriz indicam o peso de caminho mais curto de i a j
que atravessa somente os vrtices {1, 2, . . . , k}. Para simplificar, o grafo da figura no
inclui os caminhos calculados a cada estgio dos algoritmos, mas estes no so difceis de
serem encontrados.
5.1 Algoritmo
Entrada: Matriz de adjacncias Ann do grafo G, contendo os pesos das arestas
Sada: Na matriz A, a distncia entre todos os pares de vrtices de G
para k
1 at n faa
para i
1 at n faa
para j
1 at n faa
w(i, j)
fim para
fim para
fim para
Ao final da execuo, o algoritmo encontrar os caminhos mais curtos entre todos
os pares de vrtices do grafo de entrada. Este algoritmo possui complexidade de O(|V |3).
18
CONCLUSO
19
REFERNCIAS BIBLIOGRFICAS
Michel. rvores
http://www.inf.ufpr.br/~andre/Disciplinas/BSc/CI065/michel/ - Acessado
em: 30/05/04
Silva, Leonardo. Analise de Algoritmos (UCDB)
http://www.ec.ucdb.br/~marco/courses03a/aa/seminars/ - Acessado em:
30/05/04
Castro Junior, Amaury A. Implementao e Avaliao de Algoritmos
BSP/CGM para o Fecho Transitivo de Problemas Relacionados
www.dct.ufms.br/mestrado/dissertacoes/ - Acessado em: 30/05/04
Santos, Clesio S. Grafos
www.inf.ufrgs.br/~nedel/inf01203/ - Acessado em: 30/05/04
Oliveira, Denise. Teoria dos Grafos e Anlise Combinatria (UFRGS)
www.inf.ufrgs.br/~edenise/inf05512/ - Acessado em: 30/05/04
Universidade Federal da Bahia (UFBA)
http://www.im.ufba.br/mat156/ - Acessado em: 30/05/2004