Abstract. Throughout this article, it is been done an analyses of Dijkstra algorithm and its efficiency on solving the shortest path problem. Computational
tests were made in order to verify the execution of the algorithm and its efficiency with graphs with distinct numbers of vertex and weights. At the end it is
done a analyses of the obtained results and a conclusion.
Resumo. Ao longo deste artigo e realizada uma analise do algoritmo de Dijkstra e sua eficacia na resoluca o do problema do caminho mnimo. Testes computacionais foram realizados a fim de se verificar a execuca o do algoritmo e sua
eficiencia com grafos de diferentes numeros de arestas e pesos. Ao final e feita
uma analise dos resultados obtidos e uma conclusao.
1. Introduca o
Um dos principais problemas que a Ciencia da Computaca o propoe-se a resolver e o
problema do Caminho Mnimo. Este problema consiste em encontrar, dado um grafo,
o menor caminho de um vertice a todos os outros. Possuindo aplicaco es em diversos
problemas que ocorrem nas a reas de transporte,logstica, redes de computadores e de
telecomunicaco es entre outros.
Um dos algoritmos propostos pela Ciencia da Computaca o para resolver este problema e o Algoritmo de Dijkstra.Desenvolvido pelo Cientista da Computaca o Edsger
Dijkstra em 1956 e publicado em 1959, este algoritmo soluciona o problema do caminho mnimo em um grafo valorado direcionado G = (V,E) para o caso de todas as suas
arestas possurem pesos nao negativos.
Neste artigo sera discutida a eficiencia do algoritmo atraves do teste de corretude,
analise algortmica e testes computacionais realizados com diferentes tipos de grafos. Na
seca o 2, sera feita uma breve descrica o do problema. Na seca o 3, descreveremos o objetivo do problema. Na seca o 4, apresentaremos o algoritmo, a demonstraca o da corretude
e a analise de sua complexidade. Na seca o 5, sao apresentados testes computacionais a
fim de demonstrar seu custo com diferentes tipos de grafo. Por fim, na seca o 6, sera feita
uma pequena analise dos resultados obtidos na seca o anterior.
2. Problema e Motivaca o
Encontrar a rota mais curta possvel do Rio de Janeiro a Sao
Paulo[Cormen 2002].Calcular caminho mais curto entre cidades com o Dijikstra e
calcular a distancia de grafos com pesos sempre maior que zero. O problema do caminho
mnimo consiste em encontrar um caminho entre dois vertices u e v em um grafo
direcionado e valorado cuja soma dos pesos das arestas seja mnimo. Este problema
poderia ser resolvido utilizando o algoritmo de Busca em Largura. Contudo, este metodo
nao assegura que, no caso de um grafo com arestas de peso diferente de 1, o caminho
entre dois vertices seja o mnimo. Para tanto, e necessario, pois, um mecanismo que
garanta que, a cada vertice visitado, a soma das distancias dos vertices predecessores a
este seja a menor possvel.
3. Objetivo
O trabalho visa a implementaca o do algoritmo Dijkstra utilizando heap como fila de prioridade para encontrar o caminho mnimo com custo computacional baixo e tambem visa
obter resultados para diferentes tipos de entrada para o algoritmo.
4. Proposta
4.1. O Algoritmo de Dijkstra
Como fora dito na introduca o deste arquivo, o algoritmo de Dijkstra resolve o problema
do caminho mnimo em um grafo G = (V, E) para o caso de suas arestas possurem
pesos nao negativos. Com uma boa implementaca o, o tempo de execuca o do algoritmo de
Dijkstra e menor do que uma outra alternativa para o problema:o algoritmo de BellmondFord.
O algoritmo mantem um conjunto S de vertices cujos pesos do caminho mnimo
final a partir da aresta s ja esta determinado. Repetitivamente, o algoritmo seleciona um
vertice u em V S com o menor caminho mnimo esperado, adiciona u V S, e relaxa
todos os vertices que partem de u. Para a implementaca o estudada neste artigo, utilizouse uma fila de prioridades (heap) Q. Abaixo, o algoritmo em pseudocodigo, sendo w o
peso da aresta, s, a aresta inicial, d, a soma das distancias dos vertices predecessores e
o predecessor do vertice em questao:
Dijkstra(G, w, s)
1. para cada vertice v G.V
2. v.d =
3. v. = N IL
4. s.d = 0
5. S =
6. Q = G.V
7. enquanto Q 6=
8. u = extrairMin{Q}
9. S = S {u}
10. para cada vertice v G.adj[u]
11. relaxar(u, v, w)
4.2. Prova de Corretude
Dado um grafo G = (V,E), uma funca o custo c e um vertice s o algoritmo Dijkstra corretamente encontra uma caminho de custo mnimo de s a t para todo vertice acessvel a partir
de s.
5. Experimentos
Para avaliar a execuca o do algoritmo, testes computacionais foram realizados. Os testes
apresentados aqui foram realizados em um computador HP G56 Celeron 2,20GHz,
3,00GB, Windows 7 Home Premium 64bits.
A metodologia usada foi atraves de iteraco es. O numero de arestas e vertices que
compoem o grafo sao dados como parametros de entrada. As arestas e seus respectivos
pesos foram gerados aleatoriamente atraves de um gerador de grafos.
Os resultados obtidos em cada execuca o sao apresentados na tabela abaixo. Os
dados apresentados sao, respectivamente, o numero de vertices, o numero de arestas e o
tempo de execuca o .Este u ltimo descreve somente o tempo de execuca o do algoritmo de
Dijkstra. O tempo para geraca o dos grafos nao foi computado.
Tabela 1. Tabela de Experimentos
Teste
1
2
3
4
5
6
7
Vertices
5
20
50
100
500
700
750
Arestas
10
50
100
1000
10000
25000
50000
6. Conclusoes
Conforme proposto a busca por um caminho mnimo foi abordada neste trabalho e como
soluca o foi aplicado o algoritmo Dijikstra implementando com fila de prioridade para obter uma complexidade o tima.Constatamos entao atraves dos exemperimentos que a uniao
do algoritmo e fila de prioridade geram as vantagens desejadas com custo computacional
baixo.
Referencias
Cormen, T. H. e. a. (2002). Algoritmos teoria e pratica. Elsevier ltda, 2 edition.
[1]Cromen, Thomas H. et al. Introduction to Algorithms. 3th ed. The MIT
Press.2009
[2] http://en.wikipedia.org/wiki/Dijkstra