0% encontró este documento útil (0 votos)
201 vistas8 páginas

Algoritmo de Dijkstra Explicado

El algoritmo de Dijkstra encuentra el camino más corto entre un vértice origen y todos los demás vértices en un grafo. Funciona explorando todos los caminos más cortos que parten del vértice origen y almacena las distancias mínimas a cada vértice. Primero inicializa las distancias a infinito excepto para el vértice origen. Luego actualiza las distancias a los vértices vecinos si encuentra un camino más corto a través del vértice actual.
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PPTX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
201 vistas8 páginas

Algoritmo de Dijkstra Explicado

El algoritmo de Dijkstra encuentra el camino más corto entre un vértice origen y todos los demás vértices en un grafo. Funciona explorando todos los caminos más cortos que parten del vértice origen y almacena las distancias mínimas a cada vértice. Primero inicializa las distancias a infinito excepto para el vértice origen. Luego actualiza las distancias a los vértices vecinos si encuentra un camino más corto a través del vértice actual.
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PPTX, PDF, TXT o lee en línea desde Scribd

ALGORITMO DE DIJKSTRA

Su nombre se refiere a Edsger Dijkstra, quien lo

describi por primera vez en 1959.


El algoritmo de Dijkstra, tambin llamado

algoritmo de caminos mnimos, es un algoritmo para la determinacin del camino ms corto dado un vrtice origen al resto de vrtices en un grafo con pesos en cada arista.

ALGORITMO DE DIJKSTRA
La idea subyacente en este algoritmo consiste en ir

explorando todos los caminos ms cortos que parten del vrtice origen y que llevan a todos los dems vrtices; cuando se obtiene el camino ms corto desde el vrtice origen, al resto de vrtices que componen el grafo, el algoritmo se detiene. El algoritmo es una especializacin de la bsqueda de costo uniforme, y como tal, no funciona en grafos con aristas de costo negativo (al elegir siempre el nodo con distancia menor, pueden quedar excluidos de la bsqueda nodos que en prximas iteraciones bajaran el costo general del camino al pasar por una arista con costo negativo).

Funciona de la siguiente manera:


Teniendo un grafo dirigido ponderado de N nodos no

aislados, sea x el nodo inicial, un vector D de tamao N guardar al final del algoritmo las distancias desde x al resto de los nodos. Inicializar todas las distancias en D con un valor infinito relativo ya que son desconocidas al principio, exceptuando la de x que se debe colocar en 0 debido a que la distancia de x a x sera 0. Sea a = x (tomamos a como nodo actual). Recorremos todos los nodos adyacentes de a, excepto los nodos marcados, llamaremos a estos vi.

Funciona de la siguiente manera:


Si la distancia desde x hasta vi guardada en D es mayor que

la distancia desde x hasta a, sumada a la distancia desde a hasta vi; esta se sustituye con la segunda nombrada, esto es: si (Di > Da + d(a, vi)) entonces Di = Da + d(a, vi) Marcamos como completo el nodo a. Tomamos como prximo nodo actual el de menor valor en D (puede hacerse almacenando los valores en una cola de prioridad) y volvemos al paso 3 mientras existan nodos no marcados. Una vez terminado al algoritmo, D estar completamente lleno.

Pseudocdigo del algoritmo


funcin Dijkstra (Grafo G, nodo_salida s) //Usaremos un vector para guardar las distancias del nodo salida

al resto entero distancia[n] //Inicializamos el vector con distancias iniciales booleano visto[n] //vector de boleanos para controlar los vertices de los que ya tenemos la distancia mnima para cada w V[G] hacer Si (no existe arista entre s y w) entonces distancia[w] = Infinito //puedes marcar la casilla con un -1 por ejemplo Si_no distancia[w] = peso (s, w) fin si fin para

Pseudocdigo del algoritmo


distancia[s] = 0 visto[s] = cierto //n es el nmero de vertices que tiene el Grafo mientras que (no_esten_vistos_todos) hacer vertice = coger_el_minimo_del_vector distancia y que no este visto; visto[vertice] = cierto; para cada w sucesores (G, vertice) hacer si distancia[w]>distancia[vertice]+peso (vertice, w) entonces distancia[w] = distancia[vertice]+peso (vertice, w) fin si fin para fin mientras fin funcin

Ejemplo:

También podría gustarte