Está en la página 1de 2

Es un algoritmo para la determinación del camino más corto dado un vértice origen al resto

de vértices en un grafo con pesos en cada arista. Su nombre se refiere a Edsger Dijkstra,
quien lo describió por primera vez en 1959.

Es un algoritmo greddy.
En ciencias de la computación, un algoritmo voraz (también conocido como goloso, ávido,
devorador o greedy) es una estrategia de búsqueda por la cual se sigue una heurística
consistente en elegir la opción óptima en cada paso local con la esperanza de llegar a una
solución general óptima.

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.

Aplicaciones
Distribución de productos a una red de establecimientos comerciales.
Distribución de correos postales.
Sea G = (V, A) un grafo dirigido ponderado

Pasos del algoritmo

Sea V un conjunto de vértices de un grafo.


Sea C una matriz de costos de las aristas del grafo, donde en C[u,v] se almacena el costo
de la arista entre u y v.
Sea S un conjunto que contendrá los vértices para los cuales ya se tiene determinado el
camino mínimo.
Sea D un arreglo unidimensional tal que D[v] es el costo del camino mínimo del vértice
origen al vértice v.
Sea P un arreglo unidimensional tal que P[v] es el vértice predecesor de v en el camino
mínimo que se tiene construido.
Sea vinicial el vértice origen. Recordar que el Algoritmo Dijkstra determina los caminos
mínimos que existen partiendo de un vértice origen al resto de los vértices.

Paso 1. S ← {vinicial} //Inicialmente S contendrá el vértice //origen


Paso 2. Para cada v∈V, v ≠ vinicial, hacer
2.1. D[v] ← C[vinicial, v] //Inicialmente el costo del //camino mínimo de vinicial a v es lo
contenido en //la matriz de costos
2.2. P[v] ← vinicial //Inicialmente, el //predecesor de v en el camino mínimo construido //hasta el
momento es vinicial
Paso 3. Mientras (V – S ≠ ∅) hacer //Mientras existan vértices para //los cuales no se ha determinado
el //camino mínimo
3.1. Elegir un vértice w∈(V-S) tal que D[w] sea el mínimo.
3.2. S ← S ∪ {w} //Se agrega w al conjunto S, pues ya se //tiene el camino mínimo hacia w
3.3. Para cada v∈(V-S) hacer
3.3.1. D[v] ← min(D[v],D[w]+C[w,v]) //Se escoge, entre //el camino mínimo hacia v que se
tiene //hasta el momento, y el camino hacia v //pasando por w mediante su camino mínimo, //el de
menor costo.
3.3.2. Si min(D[v],D[w]+C[w,v]) = D[w]+C[w,v] entonces P[v] ← w //Si se escoge ir por w
entonces //el predecesor de v por el momento es w
Paso 4. Fin

También podría gustarte