algoritmo de dijkstra-daniel

12
ALGORITMO DE DIJKSTRA La red de la figura contiene las distancias en millas, las ciudades 1,2,… y 8. Hallar la ruta más corta usando el algoritmo de Dijkstra. SOLUCIÓN 1. Para comenzar ponemos el nodo 1 con etiqueta permanente igual a cero [1 2 3 4 5 6 7 8] [0* 12 7 5 ] 2. Asignamos las etiquetas temporales y finalmente fijamos la menor en este caso el nodo 4 [1 2 3 4 5 6 7 8] [0* 12 7 5* ] 3. A partir de ello podemos hallar la nueva etiqueta del nodo 7 Nueva etiqueta 7 = min {∞,5+11} Nueva etiqueta 7 = 16 [1 2 3 4 5 6 7 8] 12 3 6 4 7 1 1 8 15 2 5 5 14 7 7 11 8 13 5 8

Upload: 10170126

Post on 10-Dec-2015

10 views

Category:

Documents


0 download

DESCRIPTION

Algoritmo de Dijkstra- ruta mas corta solucion manual y con software

TRANSCRIPT

Page 1: Algoritmo de Dijkstra-daniel

ALGORITMO DE DIJKSTRA

La red de la figura contiene las distancias en millas, las ciudades 1,2,… y 8. Hallar la ruta más corta usando el algoritmo de Dijkstra.

SOLUCIÓN

1. Para comenzar ponemos el nodo 1 con etiqueta permanente igual a cero

[1 2 3 4 5 6 7 8]

[0* 12 7 5 ∞ ∞ ∞ ∞]

2. Asignamos las etiquetas temporales y finalmente fijamos la menor en este caso el nodo 4

[1 2 3 4 5 6 7 8]

[0* 12 7 5* ∞ ∞ ∞ ∞]

3. A partir de ello podemos hallar la nueva etiqueta del nodo 7

Nueva etiqueta 7 = min {∞,5+11}

Nueva etiqueta 7 = 16

[1 2 3 4 5 6 7 8]

[0* 12 7 5* ∞ ∞ 16 ∞]

85

13

8

11

7

7

14

552

15

811

74

63

12

Page 2: Algoritmo de Dijkstra-daniel

4. Repetimos el proceso y fijamos el menor

[1 2 3 4 5 6 7 8]

[0* 12 7* 5* ∞ ∞ 16 ∞]

Ahora hallamos la nueva etiqueta del nodo 7 tomando en cuenta de que el nodo 7 ahora tiene por etiqueta 16

Nueva etiqueta 7 = min{16,7+13 }

Nueva etiqueta 7= 16

Nueva etiqueta 6 = min {∞,7+8}

Nueva etiqueta 6 = 15

Nueva etiqueta 5= min {∞,7+15}

Nueva etiqueta 5 = 22

[1 2 3 4 5 6 7 8]

[0* 12 7* 5* 22 15 16 ∞]

5. Ahora fijamos el menor que en este caso es el nodo 2, con su etiqueta igual a 12

[1 2 3 4 5 6 7 8]

[0* 12* 7* 5* 22 15 16 ∞]

6. Ahora hallamos la nueva etiqueta del nodo 5, teniendo en cuenta que en estos momentos su etiqueta actual es igual a 22

Nueva etiqueta 5= min {22,12+5}

Nueva etiqueta 5 = 17

Ahora actualizamos los valores

[1 2 3 4 5 6 7 8]

[0* 12* 7* 5* 17 15 16 ∞]

Page 3: Algoritmo de Dijkstra-daniel

7. Repetiremos los pasos anteriores y fijaremos el menor en este caso es el nodo 6 cuya etiqueta temporal es 15

[1 2 3 4 5 6 7 8]

[0* 12* 7* 5* 17 15* 16 ∞]

8. Ahora que fijamos la etiqueta temporal del nodo 6 hallaremos la etiqueta del nodo 8

Nueva etiqueta 8= min {∞,15+7}

Nueva etiqueta 8 = 22

[1 2 3 4 5 6 7 8]

[0* 12* 7* 5* 17 15* 16 22]

9. Fijamos el menor que en este caso es 16 y calculamos la etiqueta del nodo 8 teniendo en cuenta que su etiqueta temporal es igual a 22.

[1 2 3 4 5 6 7 8]

[0* 12* 7* 5* 17 15* 16* 22]

Nueva etiqueta 8= min {22,16+8 }

Nueva etiqueta 8 = 22

10. Repetiremos el paso anterior y fijaremos el menor que en este caso es el nodo 5 cuya etiqueta temporal es 17 ahora con esto calcularemos la nueva etiqueta del nodo 8

[1 2 3 4 5 6 7 8]

[0* 12* 7* 5* 17* 15* 16* 22]

Nueva etiqueta 8= min {22,17+14 }

Nueva etiqueta 8 = 22

LA DISTANCIA MÁS CORTA ES DE 22 KM y se encuentra en el tramo [1-3-6-8]

Page 4: Algoritmo de Dijkstra-daniel

SOLUCION CON LINGO

Page 5: Algoritmo de Dijkstra-daniel

PROBLEMA 2:

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 6: Algoritmo de Dijkstra-daniel

SOLUCIÓN

1. Primero ponemos como etiqueta permanente al nodo que representa la ciudad A

[A B C D E F G]

[0* 4 5 3 ∞ ∞ ∞]

2. Luego de asignar las etiquetas temporales elegimos la menor y la fijamos como permanente

[A B C D E F G]

[0* 4 5 3* ∞ ∞ ∞]

3. Ahora hallaremos la nueva etiqueta del nodos C y FNueva etiqueta nodo C = min{ 5 ,3 + 2}Nueva etiqueta nodo C = 5

Nueva etiqueta nodo F = min { ∞ ,3+7}Nueva etiqueta nodo F = 10

[A B C D E F G]

[0* 4 5 3* ∞ 10 ∞]

4. Ahora fijaremos la menor etiqueta como permanente y calcularemos las nuevas etiquetas para C y E

[A B C D E F G]

[0* 4* 5 3* ∞ 10 ∞]

Nueva etiqueta para C= min{ 5, 4+3}

Nueva etiqueta para C= 5

Nueva etiqueta para E = min { ∞ , 4+6}

Nueva etiqueta para E = 10

[A B C D E F G]

[0* 4* 5 3* 10 10 ∞]

Page 7: Algoritmo de Dijkstra-daniel

5. Ahora fijaremos como permanente el menor que en este caso es el nodo C cuya etiqueta es 5

[A B C D E F G]

[0* 4* 5* 3* 10 10 ∞]

6. Hallamos las nuevas etiquetas para E, F y GNueva etiqueta para E= min{ 10 ,5+4}Nueva etiqueta para E= 9Nueva etiqueta para F= min{ 10 ,5+5}Nueva etiqueta para F= 10

Nueva etiqueta para G= min{ ∞ ,5+25}Nueva etiqueta para G=30

[A B C D E F G]

[0* 4* 5* 3* 9 10 30]

7. Ahora etiquetamos permanentemente al menor

[A B C D E F G]

[0* 4* 5* 3* 9* 10 30]

8. Ahora calculamos las nuevas etiquetas para F y G

Nueva etiqueta para F= min{ 10 , 9 + 6}

Nueva etiqueta para F= 10

Nueva etiqueta para G= min { 22, 9+7}

Nueva etiqueta para G = 16

[A B C D E F G]

[0* 4* 5* 3* 9* 10 16]

9. Ahora repetimos los pasos anteriores y fijamos el menor en este caso el F cuya etiqueta es igual a 10.

[A B C D E F G]

[0* 4* 5* 3* 9* 10* 16]

Page 8: Algoritmo de Dijkstra-daniel

10. Finalmente calculamos la nueva etiqueta para GNueva etiqueta para G= min {16 , 10 + 8}Nueva etiqueta para G = 16

EL CAMINO MAS CORTO ES A-C-E-G CON UNA DISTANCIA DE 16 KM

Solución con LINGO

Page 9: Algoritmo de Dijkstra-daniel