Escolar Documentos
Profissional Documentos
Cultura Documentos
Índice
Algoritmo
Complejidad
Pseudocódigo
Otra versión en pseudocódigo sin cola de prioridad
Véase también
Enlaces externos
Algoritmo
Teniendo un grafo dirigido ponderado de N nodos no aislados, sea x el nodo inicial. Un vector D de
tamaño N guardará al final del algoritmo las distancias desde x hasta el resto de los nodos.
1. Inicializar todas las distancias en D con un valor infinito relativo, ya que son desconocidas al
principio, exceptuando la de x, que se debe colocar en 0, debido a que la distancia de x a x
sería 0.
2. Sea a = x (Se toma a como nodo actual.)
3. Se recorren todos los nodos adyacentes de a, excepto los nodos marcados. Se les llamará
nodos no marcados vi.
4. Para el nodo actual, se calcula la distancia tentativa desde dicho nodo hasta sus vecinos con
la siguiente fórmula: dt(vi) = Da + d(a,vi). Es decir, la distancia tentativa del nodo ‘vi’ es la
distancia que actualmente tiene el nodo en el vector D más la distancia desde dicho nodo ‘a’
(el actual) hasta el nodo vi. Si la distancia tentativa es menor que la distancia almacenada en
el vector, entonces se actualiza el vector con esta distancia tentativa. Es decir, si dt(vi) < Dvi →
Dvi = dt(vi)
5. Se marca como completo el nodo a.
6. Se toma como próximo nodo actual el de menor valor en D (puede hacerse almacenando los
valores en una cola de prioridad) y se regresa al paso 3, mientras existan nodos no marcados.
Una vez terminado al algoritmo, D estará completamente lleno.
Complejidad
Orden de complejidad del algoritmo:
O(|V|2+|A|) = O(|V|2), sin utilizar cola de prioridad, :O((|A|+|V|) log |V|) = O(|A| log |V|)
utilizando cola de prioridad (por ejemplo, un montículo de Fibonacci). Por otro lado, si se
utiliza un montículo de Fibonacci, sería O(|V| log |V|+|A|).
El algoritmo consiste en n-1 iteraciones, como máximo. En cada iteración, se añade un vértice
al conjunto distinguido.
En cada iteración, se identifica el vértice con la menor etiqueta entre los que no están en Sk.
El número de estas operaciones está acotado por n-1.
Además, se realizan una suma y una comparación para actualizar la etiqueta de cada uno de
los vértices que no están en Sk.
Luego, en cada iteración se realizan a lo sumo 2(n-1) operaciones.
Entonces:
En general:
Pseudocódigo
Estructura de datos auxiliar: Q = Estructura de datos cola de prioridad (se puede implementar con
un montículo)
Al final, tenemos en el vector distancia en cada posición la distancia mínima del vértice salida a
otro vértice cualquiera.
Véase también
Anexo:Ejemplo de Algoritmo de Dijkstra
Algoritmo de Bellman-Ford
Enlaces externos
Wikimedia Commons alberga una galería multimedia sobre Algoritmo de Dijkstra.
Wikilibros alberga un libro o manual sobre algoritmo de Dijkstra.
Presentación del Algoritmo de Dijkstra (http://www.slideshare.net/joemmanuel/algoritmo-de-dij
kstra/)
Video del Algoritmo de Dijkstra (https://www.youtube.com/watch?v=6rl0ghgPfK0)
Applets en Java para probar el algoritmo de Dijkstra (Inglés) (https://web.archive.org/web/2007
0927234553/http://www-b2.is.tokushima-u.ac.jp/~ikeda/suuri/dijkstra/Dijkstra.shtml)
Graph (http://search.cpan.org/perldoc?Graph) módulo Perl en CPAN
Bio::Coordinate::Graph (http://search.cpan.org/perldoc?Bio::Coordinate::Graph) módulo Perl
en CPAN que implementa el algoritmo de Dijkstra
Algoritmo de Dijkstra en Javascript (http://www.yottabyte.es/discreta/) Resolución online del
Algoritmo de Dijkstra.
Optimización del algoritmo del camino más corto entre todos los nodos de un grafo no dirigido
(http://www.yusef.es/blog/2013/09/optimizacion-del-algoritmo-del-camino-mas-corto-entre-todo
s-los-nodos-de-un-grafo-no-dirigido/) Comparación entre el algoritmo de Dijkstra y el de Floyd-
Warshall, y método para optimizar el primero
Distintas implementaciones del algoritmo en RosettaCode.org (http://rosettacode.org/wiki/Dijks
tra%27s_algorithm)
Obtenido de «https://es.wikipedia.org/w/index.php?title=Algoritmo_de_Dijkstra&oldid=121693008»
Esta página se editó por última vez el 30 nov 2019 a las 17:31.
El texto está disponible bajo la Licencia Creative Commons Atribución Compartir Igual 3.0; pueden aplicarse
cláusulas adicionales. Al usar este sitio, usted acepta nuestros términos de uso y nuestra política de privacidad.
Wikipedia® es una marca registrada de la Fundación Wikimedia, Inc., una organización sin ánimo de lucro.