demo
Yurasi opened this issue · comments
ALGORITMO DE DIJKSTRA
GRAFO
En matemáticas y ciencias de la computación, un grafo (del griego grafos: dibujo, imagen) es un conjunto de objetos llamados vértices o nodos unidos por enlaces llamados aristas o arcos, que permiten representar relaciones binarias entre elementos de un conjunto.
APLICACIONES
- Se utiliza para diferentes áreas por ejemplo, síntesis de circuitos secuenciales, dibujo computacional.
- Para la administración de proyectos, utilizamos técnicas como técnica de revisión y evaluación de programas (PERT).
- Para las ciencias sociales, verifica la importancia de cada actor dentro de la red. Por ejemplo, una red social puede representar la estructura de poder dentro de una sociedad al identificar los vínculos (aristas), su dirección e intensidad y da idea de la manera en que el poder se transmite y a quiénes.
- En la biología y hábitat.
- Se usa para la solución de problemas de genética.
- Red de computadoras.
- Para modelar trayectos como el de una línea de autobús a través de las calles de una ciudad, en el que podemos obtener caminos óptimos para el trayecto aplicando diversos algoritmos.
DESCRIPCIÓN
También llamado algoritmo de caminos mínimos, es un algoritmo para la determinación del camino más corto dado un nodo origen al resto de nodos en un grafo con pesos en cada arista.
El camino más corto de un nodo a otro consiste en determinar el camino de menor costo, desde un nodo u a otro nodo v. El costo de un camino es la suma de los costos (pesos) de los arcos que lo conforman.
CARACTERÍSTICAS DEL ALGORITMO
- Es un algoritmo greddy, utiliza el principio de que para que un camino sea óptimo, todos los caminos que contiene también deben ser óptimos
- Trabaja por etapas, y toma en cada etapa la mejor solución sin considerar consecuencias futuras.
- El óptimo encontrado en una etapa puede modificarse posteriormente si surge una solución mejor. Al proceso de actualizar las distancias tomando como punto intermedio al nuevo vértice se le conoce como relajación.
- El algoritmo es una especialización de la búsqueda de costo uniforme, y como tal, no funciona en grafos con aristas de costo negativo
¿CÓMO TRABAJA?
Primero marcamos todos los nodos como no utilizados. El algoritmo parte de un nodo origen que será ingresado, a partir de ese nodo evaluaremos sus adyacentes, como dijkstra usa una técnica greedy entre todos los nodos adyacentes, buscamos el que esté más cerca de nuestro punto origen, lo tomamos como punto intermedio y vemos si podemos llegar más rápido a través de este nodo a los demás. Después escogemos al siguiente más cercano (con las distancias ya actualizadas) y repetimos el proceso. Esto lo hacemos hasta que el nodo no utilizado más cercano sea nuestro destino.
EJEMPLO
Se escoge el nodo inicio, en este caso el nodo A. Luego se marca en el nodo la distancia desde el nodo anterior, pero como no lo hay, se deja nulo.
De los nodos adyacentes de A, se marca el peso acumulado junto con el nodo antecesor, es decir, A.
De los nodos ya visitados, se escoge el nodo de menos peso acumulado, en este caso, el nodo C.
Se toman los nodos adyacentes a C que no estén marcados de gris y se calculan sus pesos acumulados, sumando el que ya se tiene con el peso de la siguiente ruta, entonces:
- Para B: 5+4=9. Como el nodo B ya poseía un peso acumulado de 6, no se modifica.
- Para D: 5+6=11. El nodo C ya poseía un peso de 8, por lo tanto tampoco se modifica.
El grafo no sufre cambio alguno
De los nodos visitados y no marcados, se busca el de menor peso acumulado, en este caso, el nodo B.
De los nodos adyacentes de B, se marca el peso acumulado junto al nodo antecesor (nodo B), entonces:
- Para E: 6+3=9.
- Para D: 6+5=11. Pero D ya poseía un peso de 8, así que no sufre cambio alguno.
El grafo queda entonces así:
De los nodos ya visitados y no marcados con gris, se toma el de menor peso, en este caso el D.
De los nodos adyacentes de D que no están marcados, se calculan los pesos acumulados:
- Para E: 8+2=10. Como E poseía un peso de 9, no se modifica.
El grafo no tiene cambio alguno.
Como queda solo un nodo por seleccionar, se da por terminado el algoritmo, con el que ya se puede determinar la ruta más corta del nodo de inicio a otro.
Teniendo en cuenta la solución, se marca el camino de menor distancia tomando como guía el nodo antecesor, hasta llegar al destino requerido.