el problem adela rut am scort a

14
El Problema de la Ruta más Corta Algoritmo de Dijkstra

Upload: liliana-jarro-villegas

Post on 16-Aug-2015

226 views

Category:

Documents


0 download

DESCRIPTION

EJERCICIOS

TRANSCRIPT

Page 1: El Problem Adela Rut Am Scort A

El Problema de la Ruta más Corta

Algoritmo de Dijkstra

Page 2: El Problem Adela Rut Am Scort A

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 de la Ruta más Corta

Page 3: El Problem Adela Rut Am Scort A

Algoritmo de Dijkstra

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.

Page 4: El Problem Adela Rut Am Scort A

Algoritmo de Dijkstra 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. 

Page 5: El Problem Adela Rut Am Scort A

Algoritmo de Dijkstra

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.

Page 6: El Problem Adela Rut Am Scort A

Algoritmo de Dijkstra1. 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.

Page 7: El Problem Adela Rut Am Scort A

Algoritmo de Dijkstra

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.

Page 8: El Problem Adela Rut Am Scort A

Algoritmo de Dijkstra1. 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"] 

Page 9: El Problem Adela Rut Am Scort A

Algoritmo de Dijkstra2. 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.

Page 10: El Problem Adela Rut Am Scort A

Algoritmo de Dijkstra

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.

Page 11: El Problem Adela Rut Am Scort A

Algoritmo de Dijkstra

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.

Page 12: El Problem Adela Rut Am Scort A

Algoritmo de Dijkstra5. 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"]  

Page 13: El Problem Adela Rut Am Scort A

Algoritmo de Dijkstra6. 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"].

Page 14: El Problem Adela Rut Am Scort A

Algoritmo de Dijkstra7. 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.