Documentos de Académico
Documentos de Profesional
Documentos de Cultura
ndice
1 Algoritmo
2 Complejidad
3 Pseudocdigo
4 Otra versin en pseudocdigo sin cola de
prioridad
5 Otra versin en C del Algoritmo de Dijkstra
6 Vase tambin
7 Enlaces externos
Algoritmo
Teniendo un grafo dirigido ponderado de N nodos no aislados, sea x el nodo inicial, un vector D de tamao N
guardar al final del algoritmo las distancias desde x al 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 sera 0.
2. Sea a = x (tomamos a como nodo actual).
3. Recorremos todos los nodos adyacentes de a, excepto los nodos marcados, llamaremos a estos nodos no
marcados vi.
4. Para el nodo actual, calculamos la distancia tentativa desde dicho nodo a sus vecinos con la siguiente
frmula: 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 ms la distancia desde dicho el nodo a (el actual) al nodo vi. Si la distancia
tentativa es menor que la distancia almacenada en el vector, actualizamos el vector con esta distancia
tentativa. Es decir: Si dt(vi) < Dvi Dvi = dt(vi)
5. Marcamos como completo el nodo a.
6. Tomamos como prximo nodo actual el de menor valor en D (puede hacerse almacenando los valores en
una cola de prioridad) y volvemos al paso 3 mientras existan nodos no marcados.
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 montculo). Por otro lado, si se utiliza un Montculo
de Fibonacci, sera O(|V| log |V|+|A|).
La la complejidad computacional del algoritmo de Dijkstra se puede calcular contando las operaciones
realizadas:
El algoritmo consiste en n-1 iteraciones como mximo. En cada iteracin se aade un vrtice al conjunto
distinguido.
En cada iteracin se identifica el vrtice con la menor etiqueta entre los que no estn en Sk. El nmero de
estas operaciones est acotado por n-1.
Adems se realizan una suma y una comparacin para actualizar la etiqueta de cada uno de los vrtices
que no estn en Sk.
Luego, en cada iteracin se realizan a lo sumo 2(n-1) operaciones. Entonces tenemos: TEOREMA: El
Algoritmo de Dijkstra realiza O(n2) operaciones (sumas y comparaciones) para determinar la longitud del
camino ms corto entre dos vrtices de un grafo ponderado simple, conexo y no dirigido con n vrtices.
Pseudocdigo
Estructura de datos auxiliar: Q = Estructura de datos Cola de prioridad (se puede implementar con un
montculo)
Al final tenemos en el vector distancia en cada posicin la distancia mnima del vrtice salida a otro vrtice
cualquiera.
Vase tambin
Anexo:Ejemplo de Algoritmo de Dijkstra
Algoritmo de Bellman-Ford
Enlaces externos
Wikimedia Commons alberga contenido multimedia sobre Algoritmo de Dijkstra.
Presentacin del Algoritmo de Dijkstra
Video del Algoritmo de Dijkstra
Applets en Java para probar el algoritmo de Dijkstra (Ingls)
Graph mdulo Perl en CPAN
Bio::Coordinate::Graph mdulo Perl en CPAN que implementa el algoritmo de Dijkstra
Algoritmo de Dijkstra en Javascript Resolucin online del Algoritmo de Dijkstra.
Optimizacin del algoritmo del camino ms corto entre todos los nodos de un grafo no dirigido
Comparacin entre el algoritmo de Dijkstra y el de Floyd-Warshall, y mtodo para optimizar el primero
Distintas implementaciones del algoritmo en RosettaCode.org
Obtenido de https://es.wikipedia.org/w/index.php?title=Algoritmo_de_Dijkstra&oldid=101162339
Se edit esta pgina por ltima vez el 15 ago 2017 a las 16:55.
El texto est disponible bajo la Licencia Creative Commons Atribucin Compartir Igual 3.0; pueden
aplicarse clusulas adicionales. Al usar este sitio, usted acepta nuestros trminos de uso y nuestra poltica
de privacidad.
Wikipedia es una marca registrada de la Fundacin Wikimedia, Inc., una organizacin sin nimo de
lucro.