Você está na página 1de 5

1

Análise do desempenho de algoritmos de


caminhos mínimos
Alexandre Amaral Gonçalves, Michael Fagundes Marques, Valteir Fernandes da Silva Júnior,

1. INTRODUÇÃO Complexidade: Como as operações de inserção


de elementos na fila, remoção de arestas

N ESTE artigo, serão apresentados os


algoritmos de busca e caminho mínimo,
A* e todas suas heurísticas de distância,
utilizadas e atualização de medidas são O(log n),
o algoritmo todo tem uma complexidade O((e +
n)log n).
Bellman Ford e Dijikstra. Todos eles com suas
respectivas descrições, utilização na prática e Bellman Ford
análises de complexidade e desempenho, que
Mesma utilidade do algoritmo de Dijkstra, mas
será exposto em uma tabela comparativa.
leva um tempo maior para executar, sua grande
2. DESCRIÇÃO DO PROBLEMA vantagem é sua possibilidade de trabalhar com
peso de arestas negativo, recurso não disponível
Desenvolver programas que executem os no algoritmo citado acima.
algoritmos propostos que mostrem o
Complexidade: Bem parecido com o Dijkstra,
desempenho médio de cada um deles para uma
mas testando arestas negativas, o Bellman Ford
massa de grafos grades para posteriormente
testa quase todas as possibilidades, sendo mais
testar e fazer as comparações pedidas.
lento que o Dijkstra e com complexidade O(|E|
3. OBJETIVO |V|).

Esse artigo tem como idéia principal, testar A*


diversas vezes os algoritmos propostos e
Uma evolução do algoritmo de Dijkstra, o A*
analisar seu desempenho, fazendo uma
estrela busca encontrar o menor caminho entre
comparação entre eles, na tentativa de encontrar,
dois pontos, testando qual o caminho do
o melhor deles na situação e no ambiente em
próximo ponto até o ponto objetivo. Por isso ele
que foi testado.
é sensível a diversas heurísticas de distância, o
que modifica seu desempenho. Ainda assim é o
4. DESCRIÇÃO DOS ALGORITMOS
melhor algoritmo, entre esses três, para buscar o
Foram propostos os três algoritmos a seguir: menor caminho.

Dijkstra Complexidade: Sua complexidade varia da


heurística de distância utilizada, sendo o pior
Algoritmo que leva o nome de seu criador caso, um algoritmo exponencial, porém na
Edsger Dijkstra, consiste em buscar o menor maioria das vezes ele é executado em O(log h *
caminho em um grafo, dirigido, ou não, e onde (x)), onde h* é a heurística de distância do
não existem arestas de peso negativo. vértice inicial até o vértice final.
Assemelha-se a um algoritmo guloso busca em
largura, porém considerando a distância entre o Para este trabalho, foram utilizado as seguintes
vértice inicial e todos os outros, ele vai heurísticas para o algoritmo de A*:
modificando essa distância com o andamento do
A - Distância Chebyshev
algoritmo, por isso não pode ser considerado um
algoritmo guloso. Métrica definida em um espaço vetorial aonde
calcula o máximo da diferença entre as
dimensões dos pontos analisados. Pode ser
2

representada e exemplificada a partir do nosso 5. METODOLOGIA UTILIZADA


trabalho pela equação abaixo:
Para a realização dos testes, foi desenvolvida
DChebyshev(p,f) = max(| x p − x f |, | y p − y f |) uma aplicação em C# 4.0 que lê os arquivos de
grafos disponibilizados, e executa todos os
B - Distância Euclidiana algoritmos deste trabalho X vezes, todos esses
dados o usuário especifica na interface do
Também conhecida por Norma Euclidiana, é a mesmo. Para automatizar o processo, foi
distância ordinária entre dois pontos no qual desenvolvido um método no programa que
poderia ser calculada com uma regra. É executa todo o processo acima cinco vezes,
calculada com a formula de Pitágoras. É selecionando assim o algoritmo e arquivo
representada pela equação abaixo: automaticamente, executando cada algoritmo
200 vezes e salvando o resultado em um arquivo
DEuclidiana(p, f) = (x p − x f ) 2 + ( y p − y f ) 2 de texto.

C – Distância Mahalanobis Resumindo, com os grafos grade (35x35 até


40x40, 50x50 e 60x60) disponibilizados, os
Medida de distância criada pelo matemático de algoritmos foram 200 vezes executados.
mesmo nome e é baseada nas correlações que
existem entre os atributos das amostras. É Uma observação deve ser feita que, para o valor
representada pela equação abaixo: do resultado das heurísticas Distância
Mahalanobis, Distância Manhattan, Distância
Chebyshev e Distância Angular entre 2 vetores,
DMahalanobis(p, f) = ( x − y ) t C −1 ( x − y )
foi multiplicado por uma constante de valor 10
afim de obter uma diferença real na execução do
D – Distância Manhattan
algoritmo de A*.
Métrica calculada a partir da soma dos valores
Abaixo segue a configuração do computador
absolutos das diferenças das coordenadas. É
que realizou os testes.
representada a partir da equação abaixo:
Processador: Core i5 M450 2.4Ghz
DManhattan(p, f) = | xp − x f | + | yp − y f | Memória RAM: 4GB
Sistema Operacional: Windows 7 Professional
E – Distância Angular entre 2 vetores
O roteiro de testes foi testar somente um
Distância calculada a partir do ângulo entre os algoritmo para os grafos escolhidos depois de
dois pontos, resumindo, quanto menor o ângulo finalizados todos o grafo passava-se para o
mais semelhantes eles são. É representada pela próximo algoritmo até terminar.
equação abaixo:
Assim sendo, primeiro a ser testado foi o
pf Dijkstra, depois o Bellman Ford, depois o A*
Dangular(p, f) = arccos
| p || f | com as heurísticas nesta ordem, Manhattan,
Euclidiana, Chebyshev, Mahalanobis e Angular
Aonde pf é o produto vetorial dos pontos entre dois vetores.
cartesianos entre p e f. Descoberto o cosseno a
Foi colocado um contador de tempo no inicio do
partir dessa equação, podemos descobrir o
ângulo entre os pontos, cujo valor utilizamos em algoritmo e um quando terminava, e um
nossa heurística.
acumulador para somar os tempos a cada Após isso, os dados foram lançados na tabela, e
execução. No fim a razão entre o acumulador e foi gerado o gráfico que pode ser visto em
o número de execuções por algoritmo era a Resultados Obtidos.
média de tempo que cada algoritmo rodava.
Também é calculado o desvio padrão a partir da
média gerada para cada bloco de execuções.
5

6. EXECUÇÃO A* - Chebyshev A* - Euclidiana A* - Mahalanobis


35x35 0.0181(0.0007) 0.0192(0.0003) 0.019(0.0002)
Utilizando a metodologia acima, o passo final
36x36 0.0196(0.0007) 0.0216(0.0005) 0.0214(0.0003)
foi executá-los para podermos chegar a alguma
37x37 0.0218(0.0011) 0.0244(0.0004) 0.0251(0.0029)
conclusão.
38x38 0.0251(0.0015) 0.0261(0.0004) 0.0277(0.0045)
Cada algoritmo tem um diferente nível de 39x39 0.0294(0.0061) 0.0286(0.0004) 0.0286(0.0003)
complexidade, sendo assim, diferentes tempo de 40x40 0.0283(0.0003) 0.0314(0.0002) 0.0317(0.0003)
execução e diferentes reações ao ambiente. Um 50x50 0,065(0,0067) 0,0718(0,0006) 0,0722(0,0017)
screenshot do programa desenvolvido pode ser 60x60 0,1279(0,0017) 0,1455(0,0096) 0,1436(0,0049)
visto abaixo.

Tabela 2 – Resultados obtidos para o


algoritmo A* com as heurísticas de Chebyshev,
Euclidiana e Mahalanobis.

A* - Manhattan A* - Angular entre 2 vetores


35x35 0.0189(0.0005) 0.0192(0.0008)
36x36 0.0212(0.0003) 0.0204(0.0003)
37x37 0.024(0.0003) 0.0231(0.0003)
38x38 0.0263(0.0019) 0.0256(0.0006)
Figura 1 – Programa utilizado para testes
39x39 0.028(0.0003) 0.0274(0.0004)

7. RESULTADOS OBTIDOS 40x40 0.0311(0.0003) 0.0305(0.0003)


50x50 0,0712(0,0013) 0,0696(0,0063)
Para cada algoritmo, pegamos a média de tempo 60x60 0,1443(0,0039) 0,1395(0,0036)
junto com o desvio padrão, ambos os dados em
segundos com até 4 casas decimais. Como
resultados obtiveram as seguintes tabelas e Tabela 3 – Resultados obtidos para o
gráficos comparativos: algoritmo A* com as heurísticas de Manhattan
e Angular entre 2 vetores
Dijkstra Bellman-Ford
35x35 0.0383(0.0014) 0.3973(0.0356)
36x36 0.0423(0.0008) 0.4279(0.0156)
3,5
60x60
37x37 0.0473(0.001) 0.4799(0.0196)
3
38x38 0.0524(0.0006) 0.5497(0.0381) 2,5
39x39 0.0585(0.0012) 0.6013(0.0301) 2
40x40 0.0641(0.0008) 0.6561(0.0182)
1,5
1
50x50 0,1675(0,0128) 1,6556(0,2378) 0,5
60x60 0,3331(0,0164) 3,4359(0,1047) 0
A* - Angular entre 2…

Dijkstra
Bellman-Ford

60x60
A* - Chebyshev

A* - Mahalanobis

A* - Euclidiana
A* - Manhattan

Tabela 1 – Resultado dos algoritmos Dijkstra e


Bellman-Ford para os grafos especificados

Figura 2 – Comparativo de Tempo entre todos


os algoritmos para o grafo de dimensão 60
4

3,5

Dijkstra

2,5 Bellman-Ford

A* - Chebyshev

2 A* - Euclidiana

A* - Mahalanobis

1,5
A* - Manhattan

A* - Angular entre 2
vetores
1

0,5

0
35x35 36x36 37x37 38x38 39x39 40x40 50x50 60x60

Figura 3 – Comparativo gráfico da evolução do desempenho dos algoritmos nos grafos testados.

8. CONCLUSÕES achar o menor caminho, e que o A* como uma


evolução dos outros dois teve um desempenho
Como pode ser visto nos resultados, o algoritmo melhor em todas as situações.
A* mesmo com a variação de acordo com as
distâncias foi mais rápido para todos os grafos e Identificamos também que apesar das
produziu um resultado melhor. O Dijkstra e o heurísticas selecionadas obtiver quase o mesmo
Bellman Ford tiveram uma variação maior, tempo, a Distância de Chebyshev uma leve
porém na maioria das vezes o Dijkstra foi mais vantagem contra as outras heurísticas,
rápido. O que pode ser concluído é que os provavelmente por que entre todas as heurísticas,
algoritmos foram evoluindo na tentativa de ela é a mais simples de se executar.
5

9. BIBLIOGRAFIA

[1] AVELINO, Neilor, "Algoritmo de Bellman-Ford",


Disponível HTTP: http://www.inf.uri.com.br/neilor/material/Alg3/bellman-ford-floyd-warshall.pdf (Maio 2011).

[2] "One Source Shortest Path: The Bellman-Ford Algorithm",


Disponível HTTP: http://compprog.wordpress.com/2007/11/29/one-source-shortest-path-the-bellman-ford-algorithm/
(Maio 2011).
[3] NONATO, Luis Gustavo, "Algoritmo de Dijkstra",
Disponível HTTP: http://www.lcad.icmc.usp.br/~nonato/ED/Dijkstra/node84.html (Maio 2011).

[4] MOORE, Andrew, "A-star Heuristic Search",


Disponível HTTP: http://www.autonlab.org/tutorials/astar.html (Maio 2011).
[5] TAVARES, Daniel, "Influência da Métrica Para o Classificador Baseado na Regra dos k-Vizinhos-Mais-Próximos",
Programa de Pós-Graduação em Engenharia Eletrônica - UFMG.

Você também pode gostar