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.
Por Rey Salcedo; email resalpa84@gmail.com     DIJKSTRA EL CAMINO MAS CORTO                           cambiamos   de   col...
Por Rey Salcedo; email resalpa84@gmail.com                                                                de color verde. ...
Por Rey Salcedo; email resalpa84@gmail.comvisitados   y   que   no   esta   marcado   con   el   color verde   y   que   t...
Por Rey Salcedo; email resalpa84@gmail.com(Octava iteracion) Nos ubicamos en el nodo H,             (Novena   iteracion)  ...
Por Rey Salcedo; email resalpa84@gmail.comD), primero calculamos el  peso acumulado asi:          (Decimo segunda iteracio...
Por Rey Salcedo; email resalpa84@gmail.com                                                            (Decimo cuarta itera...
Por Rey Salcedo; email resalpa84@gmail.com                                                               Miremos este ulti...
Upcoming SlideShare
Loading in …5
×

Algoritmo dijkstra

36,765 views

Published on

Explicacin del Algoritmo dijkstra

He aquí la implementacion que he hecho en java espero les guste:
http://usandojava.blogspot.com/2012/05/implementacion-en-java-del-algoritmo-de.html

Published in: Education
  • @AnaGomez50 El algoritmo funciona por igual en dirigidos y no dirigidos, saludos
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • y como seria con un grafo dirigido
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • He aquí la implementacion que he hecho en java espero les guste:
    http://usandojava.blogspot.com/2012/05/implementacion-en-java-del-algoritmo-de.html
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • @AbiGuevara Gracias Abi
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • excelente explicacion
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

Algoritmo dijkstra

  1. 1. Por Rey Salcedo; email resalpa84@gmail.com DIJKSTRA EL CAMINO MAS CORTO cambiamos   de   color   para   indicar   que   ya   lo  usamos,  quedando según la siguiente figura.Basicamente podemos decir que el algoritmo de dijkstra nos permite determinar dado dos nodos de un grafo la ruta mas corta que los une.Por decirlo de alguna manera, voy a explicar de manera grafica y paso a paso como determinar dicha ruta mas corta, esto gracias a éste metodo didactico y facil de comprender y que pretendo que ustedes aprendan y asi puedan generar su propio algoritmo de dijkstra.Antes   de   empezar   pensemos   que   nuestros nodos   pueden   tener   dos   propiedades acumuladoPeso y otro llamando nodoAntecesor,  (Segunda   iteracion)  Marcamos   los   nodos el manejo de estas variables las aprenderemos  adyacentes de A, inicializando sus variables de en la medida que las vallamos usandolas. la siguiente forma:Para   efectos   de   esta   explicacion   usaremos   el  acumuladoPeso   =   [acumuladoPeso   del   nodo  grafo de la siguiente figura: antecesor (en este caso el de A)] + peso de la   arista que los une; nodoAntecesor = el nombre del nodo antecesor; Asi para B: acumuladoPeso = 0 + 6 = 6; nodoAntecesor = A; Para D: acumuladoPeso = 0 + 5 = 5; nodoAntecesor = A; Para G: acumuladoPeso = 0 + 8 = 8; nodoAntecesor = A;(Primera iteracion)  Escogemos un nodo inicio, en   este   caso   usaremos   el   nodo   A,   e  Quedando según la siguiente figura:inicializamos sus variables de la siguiente forma:acumuladoPeso = 0;nodoAntecesor = nulo;Al   ser   nuestro   nodo   inicio,   no   tiene   pesos acumulados   ni   nodo   antecesor,   ademas   lo 
  2. 2. Por Rey Salcedo; email resalpa84@gmail.com de color verde. (ver como este paso es analogo  la iteracion 2) Para este caso los nodos adyacentes de D no  usados son: C, E, H, B; inicializamos los valores  de nuestros nodos adyancentes asi: Para C: acumuladoPeso = 5 + 4 = 9; nodoAntecesor = D; Para E: acumuladoPeso = 5 + 6 = 11; nodoAntecesor = D;(Tercera   iteracion)  Localizamos   de   los   nodos  Para H:visitados   y   que   no   esta   marcado   con   el   color  acumuladoPeso = 5 + 3 = 8;verde   y   que   tenga   menor   peso   acumulado  nodoAntecesor = D;(acumuladoPeso), en  caso  que  tengamos mas de   uno   con   la   caracteristica   antes   descritas  Para B:estamos el la libertad de escoger cualquiera de  Como el nodo B ya esta marcado (por el nodo estos, una vez localizado lo marcamos de color  A), primero calculamos el  peso acumulado asi:verde. acumuladoPeso = 5 + 1 = 6;  como   el  nuevo  acumuladoPeso  no  generar   un Para nuestro caso el nodo a escoger es el D ya  valor mas pequeño del que ya estaba , es decir que su peso acumulado es el menor de todos  no lo mejora, el nodo B no lo modificamos.con 5, quedando según la siguiente figura: Recordemos   que   el   numero   5   corresponde   al   acumuladoPeso del nodo antecesor. Quedando según la siguiente figura:(Cuarta iteracion) Nos ubicamos en el nodo D, el   cual   escogimos   en   el   paso   anterior   y marcamos   sus   nodos   adyacentes   siempre   y cuando no lo hallamos usado, es decir no este  (Quinta   iteracion)  Localizamos   de   los   nodos 
  3. 3. Por Rey Salcedo; email resalpa84@gmail.comvisitados   y   que   no   esta   marcado   con   el   color verde   y   que   tenga   menor   peso   acumulado  como   el  nuevo  acumuladoPeso  no  generar   un (acumuladoPeso), en  caso  que  tengamos mas  valor mas pequeño del que ya estaba, es decir de   uno   con   la   caracteristica   antes   descritas  no lo mejora, el nodo C no lo modificamos.estamos el la libertar de escoger cualquiera de estos. Recordemos   que   el   numero   6   corresponde   al   acumuladoPeso del nodo antecesor.Una vez localizado lo marcamos de color verde. (ver   como   este   paso   es   analogo   a   la   tercera  Nuestro grafico no sufre ningun cambio.iteracion) (Septima iteracion)  Localizamos de los nodos Para nuestro caso el nodo a escoger es el B ya  visitados   y   que   no   esta   marcado   con   el   color que es el de menor peso acumulado con 6. verde   y   que   tenga   menor   peso   acumulado  (acumuladoPeso), en caso que tengamos  mas Quedando según la siguiente figura: de   uno   con   la   caracteristica   antes   descritas  estamos el la libertar de escoger cualquiera de  estos. Una vez localizado lo marcamos de color verde.  (ver como este paso es analogo a la tercera y  quinta iteracion) Para  nuestro   caso  podemos  escoger  entre   los  nodos G,H ya que el peso acumulado en cada  uno   de   ellos   son   los   menores   con   8;   nos  inclinaremos   a   usar   el   nodo   H   (si   usamos   el  nodo G el resultado final no varia).(Sexta iteracion)  Nos ubicamos en el nodo B,  Quedando según la siguiente figura:el   cual   escogimos   en   el   paso   anterior   y marcamos   sus   nodos   adyacentes   siempre   y cuando no lo hallamos usado, es decir no este de color verde. (ver como este paso es analogo a la segunda y cuarta iteracion).Para este caso el unico nodo adyacentes de B no usado es C.Inicializamos   los   valores   de   nuestro   nodo adyancente asi:Para C:Como el nodo C ya esta marcado (por el nodo D), primero calculamos el  peso acumulado asi:acumuladoPeso = 6 + 7 = 13; 
  4. 4. Por Rey Salcedo; email resalpa84@gmail.com(Octava iteracion) Nos ubicamos en el nodo H,  (Novena   iteracion)  Localizamos   de   los   nodos el   cual   escogimos   en   el   paso   anterior   y  visitados   y   que   no   esta   marcado   con   el   color marcamos   sus   nodos   adyacentes   siempre   y  verde   y   que   tenga   menor   peso   acumulado cuando no lo hallamos usado, es decir no este  (acumuladoPeso), en caso que tengamos  mas de color verde. (ver como este paso es analogo  de   uno   con   la   caracteristica   antes   descritas a la segunda, cuarta y sexta iteracion). estamos el la libertar de escoger cualquiera de  estos.Para este caso los nodos adyacentes de H no  3.usados son: F,G. Una vez localizado lo marcamos de color verde.  (ver   como   este   paso   es   analogo   a   la   tercera, Inicializamos   los   valores   de   nuestros   nodos  quinta y septima iteracion)adyancentes asi: Para nuestro caso el nodo a escoger es el G ya Para F: que su peso acumulado es el menor con 8.acumuladoPeso = 8 + 4 = 12;nodoAntecesor = H; Quedando según la siguiente figura:Para G:Como   el   nodo   G   ya   esta   marcado   (por   el nodoA), primero calculamos el  peso acumulado asi:acumuladoPeso = 8 + 2 = 10; como  el  nuevo   acumuladoPeso  no   generar un valor mas pequeño del que ya estaba , es decir no lo mejora, el nodo G no lo modificamos.Recordemos   que   el   numero   8   corresponde   al  acumuladoPeso del nodo antecesor. (Decima iteracion) Nos ubicamos en el nodo G, Quedando según la siguiente figura: el   cual   escogimos   en   el   paso   anterior   y  marcamos   sus   nodos   adyacentes   siempre   y  cuando no lo hallamos usado, es decir no este  de color verde. (ver como este paso es analogo  a la segunda, cuarta, sexta iteracion, etc). Para este caso el unico nodo adyacentes de G  no usado es E. Inicializamos   los   valores   de   nuestro   nodo  adyancente asi: Para E: Como el nodo E ya esta marcado (por el nodo 
  5. 5. Por Rey Salcedo; email resalpa84@gmail.comD), primero calculamos el  peso acumulado asi: (Decimo segunda iteracion) Nos ubicamos en  el nodo C, el cual escogimos en el paso anterior acumuladoPeso = 8 + 10 = 18;  y   marcamos   sus   nodos   adyacentes   siempre   y  cuando no lo hallamos usado, es decir no este como  el  nuevo   acumuladoPeso  no   generar un  de color verde. (ver como este paso es analogo valor mas pequeño del que ya estaba , es decir  a la segunda, cuarta, sexta iteracion, etc).no lo mejora, el nodo E no lo modificamos. Para este caso los nodo adyacentes de C son Recordemos   que   el   numero   8   corresponde   al   E,F.acumuladoPeso del nodo antecesor. Inicializamos   los   valores   de   nuestros   nodos Nuestro grafico no sufre cambios. adyancente asi:(Decimo primera iteracion) Localizamos de los  Para E:nodos visitados y que no esta marcado con el  Como el nodo E ya esta marcado (por el nodo color verde y que tenga menor peso acumulado  D), primero calculamos el  peso acumulado asi:(acumuladoPeso), en  caso  que  tengamos mas de   uno   con   la   caracteristica   antes   descritas  acumuladoPeso = 9 + 11 = 20; estamos el la libertar de escoger cualquiera de estos. como   el  nuevo  acumuladoPeso  no  generar   un  valor mas pequeño del que ya estaba , es decir Una vez localizado lo marcamos de color verde.  no lo mejora, el nodo E no lo modificamos.(ver   como   este   paso   es   analogo   a   la   tercera, quinta, septima iteracion, etc). Para F: Como el nodo F ya esta marcado (por el nodo Para nuestro caso el nodo a escoger es el C ya  H), primero calculamos el  peso acumulado asi:que su peso acumulado es el menor con 9. acumuladoPeso = 9 + 2 = 11; Quedando según la siguiente figura: como   el   valor   cumulado   de   F   es   12   y   el   que  acabamos   de   calcular   es   menor   (11)   es   decir  que si lo mejora, cambiamos el valor acumulado  de F por 11 y el nodo antecesor por C por ser C  quien lo mejoro. Recordemos   que   el   numero   9   corresponde   al   acumuladoPeso del nodo antecesor. Quedando según la siguiente figura: (Observe la  figura   anterior   y   ésta   que   sigue   para   que  compare el cambio que sufrió el nodo F)
  6. 6. Por Rey Salcedo; email resalpa84@gmail.com (Decimo cuarta iteracion) Nos ubicamos en el  nodo E, el cual escogimos en el paso anterior y  marcamos   sus   nodos   adyacentes   siempre   y  cuando no lo hallamos usado, es decir no este  de color verde. (ver como este paso es analogo  a la segunda, cuarta, sexta iteracion, etc). Para este caso el unico nodo adyacentes de E  es F. Inicializamos   los   valores   de   nuestro   nodo  adyancente asi: Para F:(Decimo tercera iteracion) Localizamos de los  Como el nodo F ya esta marcado (por el nodo nodos visitados y que no esta marcado con el  C), primero calculamos el  peso acumulado asi:color verde y que tenga menor peso acumulado (acumuladoPeso), en  caso  que  tengamos mas  acumuladoPeso = 11 + 2 = 13; de   uno   con   la   caracteristica   antes   descritas estamos el la libertar de escoger cualquiera de  como   el  nuevo  acumuladoPeso  no  generar   un estos. valor mas pequeño del que ya estaba , es decir  no lo mejora, el nodo F no lo modificamos.Una vez localizado lo marcamos de color verde. (ver   como   este   paso   es   analogo   a   la   tercera,  Recordemos que el numero 11 corresponde al  quinta, septima iteracion, etc). acumuladoPeso del nodo antecesor.Para   nuestro   caso   tenemos   dos   nodo   que podemos usar por ser los de menor pesos E,F Nuestro grafico no sufre cambios.Cualquiera   de   los   dos   que   usemos   esta   bien,  (Decimo quinta iteracion)  Localizamos de los para este caso tomaremos el nodo E. nodos visitados y que no esta marcado con el  color verde y que tenga menor peso acumulado Quedando según la siguiente figura: (acumuladoPeso), en caso que tengamos  mas  de   uno   con   la   caracteristica   antes   descritas  estamos el la libertar de escoger cualquiera de  estos. Una vez localizado lo marcamos de color verde.  (ver   como   este   paso   es   analogo   a   la   tercera,  quinta, septima iteracion, etc). Para nuestro caso ya solo nos queda F. Quedando según la siguiente figura:
  7. 7. Por Rey Salcedo; email resalpa84@gmail.com Miremos este ultimo ejemplo Digamos que quiero conocer la ruta mas corta  del nodo F al nodo A. Primero nos ubicamos en el F y miramos cual  es su nodo antecesor, graficamente vemos que  es el nodo C. Nos ubicamos en el nodo C y miramos cual es  su nodo antecesor, graficamente vemos que es  D.Listo, con la decimo quinta iteracion terminamos  Ahora  nos  ubicamos  en   el   nodo   D  y   miramos de   aplicar   el   dijkstra   a   este   grafo,   ya   que  cual es su nodo antecesor, graficamente vemos marcamos todos nuetros nodo; ahora podemos  que es A.identificar   el   camino   mas   corto   de   un   nodo cualquiera   al   nodo   A   el   cual   inicialmente  Como finalmente el nodo A no tiene antecesor escogimo como nodo inicio. significa que hemos llegado al nodo inicio.Y ¿Como hacemos esto?: digamos que quiero  Facilmente podemos ver que nuestra ruta es A, conocer la ruta mas corta del nodo C al nodo A. D, C y F.Primero nos ubicamos en el C y miramos cual es su nodo antecesor, graficamente vemos que es el nodo D.Ahora   nos   ubicamos  en   el  nodo   D   y miramos cual es su nodo antecesor, graficamente vemos que es A.Como finalmente el nodo A no tiene antecesor significa que hemos llegado al nodo inicio.Facilmente podemos ver que nuestra ruta es A, D y C. Como   nota   final,   suguiero   practicar   con   otros  grafos para tomar destreza. Como siempre, esperando serles de utilidad.

×