2. Se refiere a una red en la que cada arco (i , j) tiene
asociado un número cij que se interpreta como la
distancia (costo o tiempo) que hay entre los vértices i
y j. El objetivo consiste en encontrar las rutas más
cortas (económicas, rápidas) entre un nodo específico
y todos los demás nodos de la red.
El Problema dela Ruta más Corta
Ing. Nabor Chirinos
3. Algoritmo deDijkstra
Consiste en asignar una etiqueta a cada nodo de
la red, la que luego de sucesivas actualizaciones,
contendrá el valor del camino de valor mínimo
que une el nodo inicio de la red con el nodo
considerado y el vértice precedente en dicho
camino.
Ing. Nabor Chirinos
4. Algoritmo deDijkstra
Paso 1: Considere todos los nodos que estén conectados con el
origen por un arco, es decir a través de un camino de longitud 1. A
cada uno de ellos se le colocará una etiqueta que tiene dos
componentes a saber:
[ j , d ] dónde j representa el nodo precedente y d
representa distancia.
El componente de distancia de la etiqueta que se pone en cada nodo
de éstos es la distancia desde el origen. El otro componente es el
nodo predecesor (el origen en este caso). Estas etiquetas serán
temporales.
Paso 2: De todos los nodos con etiqueta temporal, se elige uno cuyo
componente de distancia sea mínimo y se lo etiqueta permanente. Los
empates se rompen arbitrariamente. Cuando todos los nodos son
permanentes se pasa al Paso 4.
Ing. Nabor Chirinos
5. Algoritmo deDijkstra
Paso 3: Todo nodo que no tenga actualmente etiqueta permanente,
estará sin etiqueta o con una temporal. Si i es el último etiquetado
permanente considere todos los vértices que estén conectados
directamente con éste a través de un camino de longitud 1. Para
cada uno de ellos calcular la suma de su distancia a i más la
distancia de la etiqueta de i.
Si el nodo no está etiquetado darle una etiqueta temporal. Si el nodo
en cuestión ya tiene etiqueta temporal, cambiarla sólo si la distancia
recién calculada es menor que la componente de distancia de la
etiqueta actual. Si la distancia recién calculada es igual a la que
tiene la etiqueta anterior, conservar ambas. Regresar al Paso 2.
Paso 4: Las etiquetas permanentes indican la distancia más corta
desde el origen a cada nodo de la red. También indican el nodo
predecesor en la ruta más corta hacia cada nodo.
Ing. Nabor Chirinos
6. Algoritmo deDijkstra
1. Rotular todos los nodos a los que se puede llegar desde el nodo
inicial con etiquetas temporales, la etiqueta que se les pondrá será
[distancia desde el nodo inicial, Nombre del Nodo Inicial].
2. Evaluar de todas los nodos con etiquetas temporales, cual posee la
distancia más corta en la etiqueta. Marcarlo como Etiqueta
Permanente (para esto puede usar un asterisco).
3. Etiquetar todos los nodos a los que se pueda llegar desde el último
nodo con etiqueta permanente, si ya tienen una etiqueta temporal,
esta se reevalúa con respecto a la distancia del nodo permanente
con que se está trabajando. Si la distancia que da (o sea la distancia
de la etiqueta permanente + la distancia al nodo evaluado ) es menor
que la que tiene en la etiqueta ésta es cambiada por una nueva
etiqueta con la distancia calculada a la de la etiqueta permanente.
4. Se chequean todas las etiquetas temporales existentes, la que tenga
la distancia más pequeña se marca como etiqueta permanente y se
repite el paso anterior hasta que todas las etiquetas sean
permanentes.
Ing. Nabor Chirinos
7. Algoritmo deDijkstra
Supongamos que existen 7 ciudades interconectadas (o sitios
cualquiera: barrios en una ciudad, departamentos en una fabrica,
etc.), cada línea representa la trayectoria permitida de una ciudad
a otra. Las distancias (o costo de transporte) entre ciudades esta
representado por un valor sobre la línea. Se pregunta por la
secuencia de ciudades que dan la distancia mínima entre la
ciudad A y la ciudad G.
Ing. Nabor Chirinos
8. Algoritmo deDijkstra
1. Etiquetar todos los nodos a donde pueda llegar desde el nodo
inicial: Es decir los nodos B, C y D.
Etiqueta para el nodo B: Es la distancia desde el nodo que viene,
o sea = 4, nombre del nodo que viene = "A“
Etiqueta= [4,"A"] , de manera análoga para el nodo C = [5, "A"]
y el nodo D = [3, "A"]
Ing. Nabor Chirinos
9. Algoritmo deDijkstra
2. Evaluar cual de todas las etiquetas temporales, tiene la
mínima distancia para que sea convertida en etiqueta
permanente. Marquemos como etiqueta permanente, con un
asterisco. En nuestro caso hay tres etiquetas temporales, [4,"A"],
[5,"A"] y [3,"A"]. La que tiene la menor distancia es [3,"A"] en el
nodo D. La convertimos en etiqueta permanente.
Ing. Nabor Chirinos
10. Algoritmo deDijkstra
3. Ahora, con base en la ultima etiqueta permanente (la del nodo D
por supuesto), se etiquetan todos los nodos a los que se pueda
llegar desde el Nodo D (el de la última etiqueta permanente). En
nuestro caso, son los Nodos C y F. La etiqueta para el Nodo F es
[3+7=10, "D"], es decir [10, D], para el Nodo C, se puede colocar la
etiqueta [3+2, "D"] = [ 5 ,"D"]. Da igual dejar la etiqueta actual, que
tiene una distancia de 5, que cambiarla por esta última, así que
dejemos la que tiene actualmente.
Ing. Nabor Chirinos
11. Algoritmo deDijkstra
4. De nuevo se evalúa de todas las etiquetas temporales, cual es
la que tiene la distancia más pequeña:[4,"A"], [5,"A"] y [10,"A"]. El
nodo B que tiene la etiqueta temporal con la distancia más
pequeña, se pasa a tener una etiqueta permanente.
Ing. Nabor Chirinos
12. Algoritmo deDijkstra
5. Etiquetar todos los nodos a los que se puede llegar desde el
nodo con la última etiqueta permanente, es decir el B. Estos
nodos son el C y el E. La etiqueta probable para el nodo C sería
[4+3, "B"]= [7,"B"], pero como ya tiene una etiqueta temporal de
[5,"A"], que tiene una distancia menor, no se cambia. Miremos el
Nodo E. La etiqueta para el Nodo E es [4+6, "B"] = [10, "B"]
Ing. Nabor Chirinos
13. Algoritmo deDijkstra
6. Evaluar de todas las etiquetas temporales, cual es la que tiene la
distancia más corta: [10,"B"], [5,"A"] y [10,"D"]. La de menor
distancia es la [5,"A"]. Se marca como etiqueta permanente. Ahora
etiquetar todos los nodos a los que se puede llegar desde el Nodo
C y que no tengan ya, una etiqueta permanente. Son los nodos E, F
y G. Para el Nodo E la etiqueta sería [5+4,"C"] =[9,"C"], que nos da
una distancia menor que la que tiene ([10,"B"]). Por lo tanto la
cambiamos. Para el Nodo F nos da [5+5,"C"]=[10,"C"], como ya
tiene una etiqueta con 10, nos es indiferente y no la
cambiamos. Para el Nodo G la etiqueta es [5+25, "C"]=[30,"C"].
Ing. Nabor Chirinos
14. Algoritmo deDijkstra
7. Evaluar cual de las etiquetas temporales tiene la distancia más corta:
[9,"C"], [10, "D"] y [30,"C"]. Gana el nodo E. Se marcacomo etiqueta
permanente y desde él evaluamos para rotular a todos los nodos a los que
pueda llegar, con etiquetas temporales: F y G. Para el Nodo F, lo dejamos
como esta por que la distancia nos da 9+6 = 15 que es mayor que el que
tiene actualmente 10, pero para el Nodo G el rotulo es [9+7,"E"] = [16, "E"].
Quedan como rótulos temporales el del nodo F y G. El menor es el del Nodo
F, se marca como permanente... no hay más rótulos temporales excepto el
del Nodo G y el Nodo G quedaría como [10+8, "G"]=[18,"G"] que es mayor
que el que ya tiene, así que mejor dejémoslo quietico y por último
marquémoslo como etiqueta permanente.
La trayectoria que da una
mínima distancia: G-E-C-A, con
una distancia mínima de 16.
Ing. Nabor Chirinos