Está en la página 1de 7

Bermudez Errazuriz Ruddy

Algoritmo de Dijkstra
Pasos
Sea x el nodo inicial (nodo fuente del grafo), un vector D de tamaño 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 sería 0 (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 vi
4. Si la distancia desde x hasta vi guardada en D es mayor que la distancia desde x hasta
a sumada a la distancia desde a hasta vi; ésta se sustituye con la segunda nombrada, esto
es: si (Di > Da + d(a, vi)) entonces Di = Da + d(a, vi)
5. Marcamos como completo el nodo a.
6. Tomamos como próximo 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.
7. Una vez terminado al algoritmo, D estará completamente lleno

Ejemplo
Teniendo en cuenta la siguiente red, que tiene como origen el nodo 1:
Bermudez Errazuriz Ruddy

Procedemos con las iteraciones, partimos de la iteración 0, es decir, asignar la etiqueta


para el nodo origen:

Iteración 0
En este paso, asignamos una etiqueta permanente para el nodo origen. Recordemos que
la etiqueta se compone por un valor acumulado, que en este caso debe ser 0, ya que es el
punto base y que no existe procedencia:

Etiqueta nodo 1 = [valor acumulado, procedencia] iteración


Etiqueta nodo 1 = [0, -] 0

Iteración 1
En este paso, evaluamos a cuáles nodos se puede llegar desde el nodo 1. En este caso se
puede llegar a los nodos 2 y 3. De manera que debemos asignar las etiquetas para cada
nodo:

Etiqueta nodo 2 = [valor acumulado, procedencia] iteración


Etiqueta nodo 2 = [0 + 100, 1] 1

0 es el valor acumulado en la etiqueta del nodo de procedencia, en este caso el valor


acumulado para el nodo 1. 100 es el valor del arco que une el nodo procedencia (1) y el
nodo destino (2). 1 es el número de la iteración.

Etiqueta nodo 3 = [valor acumulado, procedencia] iteración


Etiqueta nodo 3 = [0 + 30, 1] 1

En este caso, podemos observar que la etiqueta del nodo 3, ya contiene el menor valor
acumulado posible para llegar a este. Ya que 30 es la mínima distancia posible, toda vez
que para llegar al nodo 3 por medio del nodo 2, tendrá que recorrer como mínimo el valor
absoluto del arco que une el origen con el nodo 2 = 100. Así entonces, la etiqueta del
nodo 3 pasa a ser permanente.
Bermudez Errazuriz Ruddy

Tabulamos la iteración 1:

Iteración 2:

En este paso, evaluamos las posibles salidas desde el nodo 3, es decir los nodos 4 y 5. De
manera que debemos asignar las etiquetas para cada nodo:
Etiqueta nodo 4 = [valor acumulado, procedencia] iteración

Etiqueta nodo 4 = [30 + 10, 3] 2

Etiqueta nodo 4 = [40, 3] 2

30 es el valor acumulado en la etiqueta del nodo de procedencia, en este caso el valor


acumulado para el nodo 3. 10 es el valor del arco que une el nodo procedencia (3) y el
nodo destino (4). 2 es el número de la iteración.
Bermudez Errazuriz Ruddy

Etiqueta nodo 5 = [valor acumulado, procedencia] iteración

Etiqueta nodo 5 = [30 + 60, 3] 2

Etiqueta nodo 4 = [90, 3] 2

30 es el valor acumulado en la etiqueta del nodo de procedencia, en este caso el valor


acumulado para el nodo 3. 60 es el valor del arco que une el nodo procedencia (3) y el
nodo destino (5). 2 es el número de la iteración.
En este caso, podemos observar que la etiqueta del nodo 4, contiene el menor valor
acumulado posible para llegar a este. Así entonces, la etiqueta del nodo 4 pasa a ser
permanente.
Tabulamos la iteración 2:
Bermudez Errazuriz Ruddy

Iteración 3:

En este paso, evaluamos las posibles salidas desde el nodo 4, es decir los nodos 2 y 5. De
manera que debemos asignar las etiquetas para cada nodo:

Etiqueta nodo 2 = [valor acumulado, procedencia] iteración

Etiqueta nodo 2 = [40 + 15, 4] 3

Etiqueta nodo 2 = [55, 4] 3

40 es el valor acumulado en la etiqueta del nodo de procedencia, en este caso el valor


acumulado para el nodo 4. 15 es el valor del arco que une el nodo procedencia (4) y el
nodo destino (2). 3 es el número de la iteración.

Etiqueta nodo 5 = [valor acumulado, procedencia] iteración

Etiqueta nodo 5 = [40 + 50, 4] 3

Etiqueta nodo 5 = [90, 4] 3

40 es el valor acumulado en la etiqueta del nodo de procedencia, en este caso el valor


acumulado para el nodo 3. 50 es el valor del arco que une el nodo procedencia (4) y el
nodo destino (5). 3 es el número de la iteración.

En este caso, podemos observar que el nodo 2 ahora cuenta con 2 etiquetas temporales, y
definitivas, ya que no existe otra ruta hacia dicho nodo. De manera que se elige la etiqueta
que tenga el menor valor acumulado. Así entonces, la etiqueta del nodo 2 con procedencia
del nodo 4, pasa a ser permanente.
Bermudez Errazuriz Ruddy

Tabulamos la iteración 3:

Iteración 4:

En este paso, evaluamos las posibles salidas desde el nodo 2 y el nodo 5. Sin embargo, el
nodo 2 solo tiene un posible destino, el nodo 3, el cual ya tiene una etiqueta permanente,
de manera que no puede ser Re etiquetado. Ahora, evaluamos el nodo 5 y es un nodo que
no tiene destinos. Así entonces, su etiqueta temporal pasa a ser permanente, en este caso
cuenta con 2 etiquetas que tienen el mismo valor, es decir, alternativas óptimas. De esta
manera concluye el algoritmo de Dijkstra.
Bermudez Errazuriz Ruddy

También podría gustarte