Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Caminos más cortos a partir de múltiples fuentes en un grafo Joemmanuel Ponce Galindo
¿Qué es un grafo?
Un grafo es… <ul><li>Una pareja ordenada G(V,E) con las siguientes características: </li></ul><ul><li>V es un conjunto de ...
Grafos ponderados 1 2 4 3 5 2 4 1 1 5 3 1 1 3
Entonces <ul><li>l(a) = peso de la arista ‘a’ </li></ul><ul><li>l(x,y)  = peso de la arista de  x  a  y </li></ul>
¿Y qué podemos modelar? 1 0 3 5 6 4 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 5 3 8 6 1 2 4 3 5 1 1 1 1 1 2 4 2 3 3 2 1 3
Problema de la ruta mínima (Single Source) ¿Cómo llego del punto 1 a 4 de la manera más corta posible? 1 2 4 3 5 2 4 1 1 5...
¿Cómo se resuelve? <ul><li>Existen algoritmos genéricos para ello: </li></ul><ul><ul><li>Dijkstra Algorithm  </li></ul></u...
Algoritmo de Dijkstra <ul><li>Algoritmo glotón (greedy) </li></ul><ul><li>Punto de inicio  s </li></ul><ul><li>Conjunto  S...
Condiciones iniciales <ul><li>S={ 1 } </li></ul><ul><li>V-S={ 2,3,4,5 } </li></ul><ul><li>D=[ 0 , 2,1, ∞,3 ] </li></ul><ul...
El algoritmo <ul><li>Aumentar  S  agregando el elemento  v  en  V-S  tal que  D v  sea el mínimo de ese conjunto. </li></u...
Paso a paso (Iteración 1) <ul><li>Buscar mínimo  D i  en  V-S </li></ul><ul><li>S={ 1 } </li></ul><ul><li>V-S={ 2,3,4,5 } ...
Paso a paso (Iteración 1) <ul><li>Agregar elemento a  S . Actualizar  D </li></ul><ul><li>S={ 1,3 } </li></ul><ul><li>V-S=...
Paso a paso (Iteración 2) <ul><li>Buscar mínimo  D i  en  V-S </li></ul><ul><li>S={ 1,3 } </li></ul><ul><li>V-S={ 2,4,5 } ...
Paso a paso (Iteración 2) <ul><li>Agregar elemento a  S . Actualizar  D </li></ul><ul><li>S={ 1,3,2 } </li></ul><ul><li>V-...
Paso a paso (Iteración 3) <ul><li>Buscar mínimo  D i  en  V-S </li></ul><ul><li>S={ 1,3,2 } </li></ul><ul><li>V-S={ 4,5 } ...
Paso a paso (Iteración 3) <ul><li>Agregar elemento a  S . Actualizar  D </li></ul><ul><li>S={ 1,3,2,5 } </li></ul><ul><li>...
Paso a paso (Iteración 4) <ul><li>Buscar mínimo  D i  en  V-S </li></ul><ul><li>S={ 1,3,2,5 } </li></ul><ul><li>V-S={ 4 } ...
Paso a paso (Iteración 4) <ul><li>Agregar elemento a  S . Actualizar  D </li></ul><ul><li>S={ 1,3,2,5,4 } </li></ul><ul><l...
Final <ul><li>|S| = |V| </li></ul><ul><li>La mejor manera de llegar al vértice  u  se encuentra en  D u </li></ul><ul><li>...
¿Por qué funciona? <ul><li>Supongamos  delta(s,v)  = Mejor manera de llegar de  s   a  v </li></ul><ul><li>Si Dijkstra fun...
Demostración por contradicción <ul><li>Suponga que  u  es el primer vértice añadido a  S  tal que  D u ≠ delta(s,u) </li><...
Propiedades que tendría  u <ul><li>u  no puede ser  s  porque  D s  = 0 </li></ul><ul><li>Existe un camino de  s  a  u , d...
Suposición principal <ul><li>Sea  s->(p1)->x->y->(p2)->u  el camino más corto de  s  a  u .  </li></ul>
Propiedades de  x  y  y <ul><li>x  ya fue insertado en  S </li></ul><ul><li>D x =delta(s,x)  </li></ul><ul><li>Posteriorme...
Entonces <ul><li>Puesto que  y  se encuentra antes que  u:  </li></ul><ul><li>D y =delta(s,y)  ≤  D u  ≤  delta(s,u) </li>...
Finalmente <ul><li>Así que: </li></ul><ul><li>D y =delta(s,y)  =  D u =delta(s,u) </li></ul>
El Multiple Source Shortest-Path Problem 1 2 4 3 5 2 4 1 1 5 3 1 1 3
¿Cuál es el problema? <ul><li>¿Cuál es la mejor manera de llegar al los puntos T (town o ciudad en naranja) a partir de cu...
Consideraciones <ul><li>Existe un conjunto de fuentes  F </li></ul><ul><li>En el camino más corto para llegar a  u , exist...
Un problema más real <ul><li>Puntos Naranjas: Centros de Distribución </li></ul><ul><li>Puntos Grises: Ciudades </li></ul>...
¿Qué otro problema podemos resolver? <ul><li>Puntos Naranjas: Centros de Distribución </li></ul><ul><li>Puntos Grises: Ciu...
¿Cómo lo resolvemos con Dijkstra? <ul><li>Algoritmo glotón (greedy) </li></ul><ul><li>Puntos de inicio  Conjunto F </li></...
Condiciones iniciales <ul><li>S= F ={ 1,2 } </li></ul><ul><li>V-S={ 3,4,5 } </li></ul><ul><li>D=[ 0 , 0 ,1, 4,3 ] </li></u...
Estado final <ul><li>S={ 1,5,4,3,2 } </li></ul><ul><li>V-S={} </li></ul><ul><li>D=[ 0 , 0,1, 4,2 ] </li></ul><ul><li>1  2 ...
Conclusiones <ul><li>Complejidad  O(v 2 )  pudiéndose reducir a  O(nlogn)  con Busqueda Binaria </li></ul><ul><li>Procesa ...
Upcoming SlideShare
Loading in …5
×

Algoritmo de Dijkstra

71,122 views

Published on

Analisis del Algoritmo de Dijkstra

Published in: Technology

Algoritmo de Dijkstra

  1. 1. Caminos más cortos a partir de múltiples fuentes en un grafo Joemmanuel Ponce Galindo
  2. 2. ¿Qué es un grafo?
  3. 3. Un grafo es… <ul><li>Una pareja ordenada G(V,E) con las siguientes características: </li></ul><ul><li>V es un conjunto de vértices </li></ul><ul><li>E es un conjunto de parejas de distintos vértices, entre los cuales se trazan líneas (aristas) </li></ul>
  4. 4. Grafos ponderados 1 2 4 3 5 2 4 1 1 5 3 1 1 3
  5. 5. Entonces <ul><li>l(a) = peso de la arista ‘a’ </li></ul><ul><li>l(x,y) = peso de la arista de x a y </li></ul>
  6. 6. ¿Y qué podemos modelar? 1 0 3 5 6 4 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 5 3 8 6 1 2 4 3 5 1 1 1 1 1 2 4 2 3 3 2 1 3
  7. 7. Problema de la ruta mínima (Single Source) ¿Cómo llego del punto 1 a 4 de la manera más corta posible? 1 2 4 3 5 2 4 1 1 5 3 1 1 3
  8. 8. ¿Cómo se resuelve? <ul><li>Existen algoritmos genéricos para ello: </li></ul><ul><ul><li>Dijkstra Algorithm </li></ul></ul><ul><ul><li>Floyd Algorithm </li></ul></ul><ul><ul><li>Bellman-Ford Algorithm </li></ul></ul>
  9. 9. Algoritmo de Dijkstra <ul><li>Algoritmo glotón (greedy) </li></ul><ul><li>Punto de inicio s </li></ul><ul><li>Conjunto S </li></ul><ul><li>Vector D </li></ul>1 2 4 3 5 2 4 1 1 5 3 1 1 3
  10. 10. Condiciones iniciales <ul><li>S={ 1 } </li></ul><ul><li>V-S={ 2,3,4,5 } </li></ul><ul><li>D=[ 0 , 2,1, ∞,3 ] </li></ul><ul><li>1 2 3 4 5 </li></ul>1 2 4 3 5 2 4 1 1 5 3 1 1 3
  11. 11. El algoritmo <ul><li>Aumentar S agregando el elemento v en V-S tal que D v sea el mínimo de ese conjunto. </li></ul><ul><li>Actualizar los valores de D i para todos los elementos i existentes en V-S . </li></ul><ul><li>D i =mínimo( D i , D v +f(v, i) ) </li></ul><ul><li>Terminar cuando |S|=|V| </li></ul>
  12. 12. Paso a paso (Iteración 1) <ul><li>Buscar mínimo D i en V-S </li></ul><ul><li>S={ 1 } </li></ul><ul><li>V-S={ 2,3,4,5 } </li></ul><ul><li>D=[ 0 , 2,1, ∞,3 ] </li></ul><ul><li>1 2 3 4 5 </li></ul>1 2 4 3 5 2 4 1 1 5 3 1 1 3
  13. 13. Paso a paso (Iteración 1) <ul><li>Agregar elemento a S . Actualizar D </li></ul><ul><li>S={ 1,3 } </li></ul><ul><li>V-S={ 2,4,5 } </li></ul><ul><li>D=[ 0 , 2 , 1 , ∞,3 ] </li></ul><ul><li>1 2 3 4 5 </li></ul>1 2 4 3 5 2 4 1 1 5 3 1 1 3
  14. 14. Paso a paso (Iteración 2) <ul><li>Buscar mínimo D i en V-S </li></ul><ul><li>S={ 1,3 } </li></ul><ul><li>V-S={ 2,4,5 } </li></ul><ul><li>D=[ 0 , 2 , 1 , ∞,2 ] </li></ul><ul><li>1 2 3 4 5 </li></ul>1 2 4 3 5 2 4 1 1 5 3 1 1 3
  15. 15. Paso a paso (Iteración 2) <ul><li>Agregar elemento a S . Actualizar D </li></ul><ul><li>S={ 1,3,2 } </li></ul><ul><li>V-S={ 4,5 } </li></ul><ul><li>D=[ 0 , 2 , 1 , ∞ , 2 ] </li></ul><ul><li>1 2 3 4 5 </li></ul>1 2 4 3 5 2 4 1 1 5 3 1 1 3
  16. 16. Paso a paso (Iteración 3) <ul><li>Buscar mínimo D i en V-S </li></ul><ul><li>S={ 1,3,2 } </li></ul><ul><li>V-S={ 4,5 } </li></ul><ul><li>D=[ 0 , 2 , 1 , 6 , 2 ] </li></ul><ul><li>1 2 3 4 5 </li></ul>1 2 4 3 5 2 4 1 1 5 3 1 1 3
  17. 17. Paso a paso (Iteración 3) <ul><li>Agregar elemento a S . Actualizar D </li></ul><ul><li>S={ 1,3,2,5 } </li></ul><ul><li>V-S={ 4 } </li></ul><ul><li>D=[ 0 , 2 , 1 , 6 , 2 ] </li></ul><ul><li>1 2 3 4 5 </li></ul>1 2 4 3 5 2 4 1 1 5 3 1 1 3
  18. 18. Paso a paso (Iteración 4) <ul><li>Buscar mínimo D i en V-S </li></ul><ul><li>S={ 1,3,2,5 } </li></ul><ul><li>V-S={ 4 } </li></ul><ul><li>D=[ 0 , 2 , 1 , 6 , 2 ] </li></ul><ul><li>1 2 3 4 5 </li></ul>1 2 4 3 5 2 4 1 1 5 3 1 1 3
  19. 19. Paso a paso (Iteración 4) <ul><li>Agregar elemento a S . Actualizar D </li></ul><ul><li>S={ 1,3,2,5,4 } </li></ul><ul><li>V-S={ } </li></ul><ul><li>D=[ 0 , 2 , 1 , 6 , 2 ] </li></ul><ul><li>1 2 3 4 5 </li></ul>1 2 4 3 5 2 4 1 1 5 3 1 1 3
  20. 20. Final <ul><li>|S| = |V| </li></ul><ul><li>La mejor manera de llegar al vértice u se encuentra en D u </li></ul><ul><li>S={ 1,3,2,5,4 } </li></ul><ul><li>V-S={ } </li></ul><ul><li>D=[ 0 , 2 , 1 , 6 , 2 ] </li></ul><ul><li>1 2 3 4 5 </li></ul>1 2 4 3 5 2 4 1 1 5 3 1 1 3
  21. 21. ¿Por qué funciona? <ul><li>Supongamos delta(s,v) = Mejor manera de llegar de s a v </li></ul><ul><li>Si Dijkstra funciona: </li></ul><ul><li>D u = delta(s,u) para toda u en V </li></ul>
  22. 22. Demostración por contradicción <ul><li>Suponga que u es el primer vértice añadido a S tal que D u ≠ delta(s,u) </li></ul>
  23. 23. Propiedades que tendría u <ul><li>u no puede ser s porque D s = 0 </li></ul><ul><li>Existe un camino de s a u , de lo contrario </li></ul><ul><li>D s = ∞ </li></ul><ul><li>Si existe un camino, entonces debe existir el camino más corto. </li></ul>
  24. 24. Suposición principal <ul><li>Sea s->(p1)->x->y->(p2)->u el camino más corto de s a u . </li></ul>
  25. 25. Propiedades de x y y <ul><li>x ya fue insertado en S </li></ul><ul><li>D x =delta(s,x) </li></ul><ul><li>Posteriormente se actualizó el vértice y , así que D y =delta(s,y) , pero aun no es insertado en S </li></ul>
  26. 26. Entonces <ul><li>Puesto que y se encuentra antes que u: </li></ul><ul><li>D y =delta(s,y) ≤ D u ≤ delta(s,u) </li></ul><ul><li>Pero partimos de que u esta siendo insertado en S , así que se debe cumplir que: </li></ul><ul><li>D y ≥ D u </li></ul>
  27. 27. Finalmente <ul><li>Así que: </li></ul><ul><li>D y =delta(s,y) = D u =delta(s,u) </li></ul>
  28. 28. El Multiple Source Shortest-Path Problem 1 2 4 3 5 2 4 1 1 5 3 1 1 3
  29. 29. ¿Cuál es el problema? <ul><li>¿Cuál es la mejor manera de llegar al los puntos T (town o ciudad en naranja) a partir de cualquiera de los puntos S (fuente) ? </li></ul>
  30. 30. Consideraciones <ul><li>Existe un conjunto de fuentes F </li></ul><ul><li>En el camino más corto para llegar a u , existe sólo una fuente: </li></ul><ul><li>f 1 ->(p1)-> f 2 ->(p2)->v > f 2 ->(p2)->v </li></ul>
  31. 31. Un problema más real <ul><li>Puntos Naranjas: Centros de Distribución </li></ul><ul><li>Puntos Grises: Ciudades </li></ul><ul><li>¿De qué centro de distribución es mejor partir a la ciudad X de tal manera de que gaste los menos recursos posibles? </li></ul>5 1 2 4 3 5 2 4 1 1 3 1 1 3
  32. 32. ¿Qué otro problema podemos resolver? <ul><li>Puntos Naranjas: Centros de Distribución </li></ul><ul><li>Puntos Grises: Ciudades </li></ul><ul><li>Quiero construir un nuevo Punto de Distribución ¿Cuál es el mejor lugar para hacerlo? </li></ul>1 2 4 3 5 2 4 1 1 3 1 1 3
  33. 33. ¿Cómo lo resolvemos con Dijkstra? <ul><li>Algoritmo glotón (greedy) </li></ul><ul><li>Puntos de inicio Conjunto F </li></ul><ul><li>Conjunto S </li></ul><ul><li>Vector D </li></ul>
  34. 34. Condiciones iniciales <ul><li>S= F ={ 1,2 } </li></ul><ul><li>V-S={ 3,4,5 } </li></ul><ul><li>D=[ 0 , 0 ,1, 4,3 ] </li></ul><ul><li>1 2 3 4 5 </li></ul>1 2 4 3 5 2 4 1 1 5 3 1 1 3
  35. 35. Estado final <ul><li>S={ 1,5,4,3,2 } </li></ul><ul><li>V-S={} </li></ul><ul><li>D=[ 0 , 0,1, 4,2 ] </li></ul><ul><li>1 2 3 4 5 </li></ul>1 2 4 3 5 2 4 1 1 5 3 1 1 3
  36. 36. Conclusiones <ul><li>Complejidad O(v 2 ) pudiéndose reducir a O(nlogn) con Busqueda Binaria </li></ul><ul><li>Procesa hasta 10,000 vértices en 1 segundo </li></ul><ul><li>El Algoritmo de Dijkstra es rápido </li></ul><ul><li>Demostramos que resuelve eficazmente nuestro problema </li></ul>

×