Sei sulla pagina 1di 2

Algoritmo de Dijkstra

Publicado: 17/08/2011 por MZ.. Michel em Engenharia da Computao, Notcias, Videos


Tags:Algoritmo, Algoritmo de Dijkstra, Dijkstra, Redes
2

O algoritmo de Dijkstra, cujo nome se origina de seu inventor, o cientista da computao Edsger Dijkstra, soluciona
o problema do caminho mais curto num grafo dirigido ou no dirigido com arestas de peso no negativo, em tempo
computacional O([m+n]log n) onde m o nmero de arestas e n o nmero de vrtices. O algoritmo que serve para
resolver o mesmo problema em um grafo com pesos negativos o algoritmo de Bellman-Ford, que possui maior
tempo de execuo que o Dijkstra.
O algoritmo de Dijkstra assemelha-se ao BFS, mas um algoritmo guloso, ou seja, toma a deciso que parece tima
no momento. Para a teoria dos grafos uma estratgia gulosa conveniente j que sendo P um menor caminho entre
2 vrtices U e V, todo sub-caminho de P um menor caminho entre 2 vrtices pertencentes ao caminho P, desta
forma construmos os melhores caminhos dos vrticeis alcanveis pelo vrtice inicial determinando todos os
melhores caminhos intermedirios. Nota: diz-se um menor caminho pois caso existam 2 menores caminhos apenas
um ser descoberto.
O algoritmo considera um conjunto S de menores caminhos, iniciado com um vrtice inicial I. A cada passo do
algoritmo busca-se nas adjacncias dos vrtices pertencentes a S aquele vrtice com menor distncia relativa a I e
adiciona-o a S e ento repetindo os passos at que todos os vrtices alcanveis por I estejam em S. Arestas que ligam
vrtices j pertencentes a S so desconsideradas.
Um exemplo prtico do problema que pode ser resolvido pelo algoritmo de Dijkstra : algum precisa se deslocar de
uma cidade para outra. Para isso, ela dispe de vrias estradas, que passam por diversas cidades. Qual delas oferece
uma trajetria de menor caminho?
Algoritmo

1 passo: iniciam-se os valores:
para todo v V[G]
d[v]
[v] nulo
d[s] 0
V[G]
o conjunto de vrtices(v) que formam o Grafo G. d[v] o vetor de distncias de s at cada v.
Admitindo-se a pior estimativa possvel, o caminho infinito. [v] identifica o vrtice de onde se origina uma conexo
at v de maneira a formar um caminho mnimo.

2 passo: temos que usar dois conjuntos: S, que representa todos os vrtices v onde d[v] j contem o custo do menor
caminho e Q que contem todos os outros vrtices.
Q V[G]

3 passo: realizamos uma srie de relaxamentos das arestas, de acordo com o cdigo:
enquanto Q
u extraia-mn(Q)
S S {u}
para cada v adjacente a u
se d[v] > d[u] + w(u, v) //relaxe (u, v)
ento d[v] d[u] + w(u, v)
[v] u w(u, v)
o peso(weight) da aresta que vai de u a v.u e v so vrtices quaisquer e s o vrtice inicial.extraia-mn(Q),
pode usar um heap de mnimo ou uma lista de vrtices onde extrai-se o elemento u com menor valor d[u]
fonte wikipedia
http://webdesignerinformaticawdi.blogspot.com.br/2012/11/softwares-para-aprender-
algoritmo-e.html

Potrebbero piacerti anche