Sie sind auf Seite 1von 7

3.

3 ALGORITMOS DE CAMINOS MNIMOS

El problema de camino mnimo se puede enunciar del siguiente modo: Dado un grafo y dos vrtices
encontrar el camino (secuencia de aristas) con longitud mnima entre ambos vrtices

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. 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).
Pseudo-cdigo

**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**
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

El siguiente ejemplo se desarrollar con el fin de encontrar el camino ms corto desde a hasta z:

Leyenda:

Rojo: Aristas y vrtices pertenecientes a la solucin momentnea.


Azul: Aristas y vrtices candidatos.
Paso 1

Dijkstrapaso1.jpg

En este primer paso, podemos apreciar que hay tres candidatos: Los vrtices b, c y d. En este caso,
hacemos el camino desde el vrtice a, hasta el vrtice d, ya que es el camino ms corto de los tres.
Solucin momentnea:

Camino: AD
Distancia:5

Paso 2

Dijkstrapaso2.jpg

Ahora, vemos que se aade un nuevo candidato, el vrtice e, y el vrtice c, pero esta vez a travs del d.
Pero el camino mnimo surge al aadir el vrtice c.
Solucin momentnea:

Camino: ADC
Distancia:9

Paso 3
Dijkstrapaso4.jpg

En este paso no se aade ningn candidato ms puesto que el ltimo vrtice es el mismo que en el paso
anterior. En este caso el camino mnimo hallado es el siguiente:
Solucin momentnea:

Camino: ADCB
Distancia:11

Paso 4

Dijkstrapaso5.jpg

Como podemos comprobar, se han aadido dos candidatos nuevos, los vrtices f y g, ambos a travs del
vrtice b. El mnimo camino hallado en todo el grafo hasta ahora es el siguiente:
Solucin momentnea:

Camino: ADCBF
Distancia:15

Paso 5
Dijkstrapaso6.jpg

En este antepenltimo paso, se aaden tres vrtices candidatos, los vrtices g, z y e. Este ltimo ya
estaba pero en esta ocasin aparece a travs del vrtice f. En este caso el camino mnimo, que cambia
un poco con respecto al enterior, es:
Solucin momentnea:

Camino: ADCBF
Distancia:17

Paso 6

Dijkstrapaso7.jpg

En el penltimo paso, vuelve a aparecer otro candidato: el vrtice z, pero esta vez a travs del vrtice g.
De todas formas, el camino mnimo vuelve a cambiar para retomar el camino que vena siguiendo en los
pasos anteriores:
Solucin momentneeea:

Camino: ADCBFE
Distancia:18

Paso 7
Dijkstrapaso8.jpg

Por fin, llegamos al ltimo paso, en el que slo se aade un candidato, el vrtice z a travs del e. El
camino mnimo y final obtenido es:
Solucin Final:

Camino: ADCBFEZ
Distancia:23

Algoritmo de Ford-Fulkerson

que permite asignar pesos negativos en las aristas, aunque no permite la existencia de ciclos de
peso negativo en el grafo.

Anlisis asinttico

Tenemos que observar que cada arista se puede considerar varias veces. Empezamos ordenando
las aristas del grafo D siendo este el orden en que se considerarn las aristas en el algoritmo.
Despus de la primera pasada se repite el proceso hasta que en una pasada completa no se
produzca ningn cambio de etiquetas. Si D no tiene ciclos negativos se puede demostrar que, si el
camino mnimo s ---> u contiene k aristas entonces, despus de k pasadas alcanzamos la etiqueta
definitiva para u. Como k <= n y el n de aristas es q, resulta que la complejidad del algoritmo de
Ford es O(qn). Incluso de puede detectar un ciclo negativo si se produce una mejora en las
etiquetas en la pasada nmero n.

Pseudocdigo ejemplo
Ford-Fulkerson(G,s,t)
{
for (cada arco (u,v) de E)
{
f[u,v]= 0;
f[v,u]= 0;
}
while (exista un camino p desde s a t en la red residual Gf)
{
cf(p) = min{cf(u,v): (u,v) est sobre p};
for (cada arco (u,v) en p)
{
f[u,v]= f[u,v] + cf(p);
f[v,u]= - f[u,v];
}
}
}
Algoritmo de FloydWarshall

El algoritmo de FloydWarshall encuentra los caminos ms cortos (definidos como anteriormente)


entre cada dos vrtices de un grafo (permite pesos positivos y negativos). La complejidad del algoritmo
es O(V3 ).

Los algoritmos A*

son una generalizacin del algoritmo de Dijkstra donde la definicin de longitud del camino es ms
general. Ahora podemos asignar pesos no slo a las aristas. Tambin a los vrtices, etc. Sea, como antes,
el peso de una arista, el peso asociado a un vrtice, el costo estimado del camino del vrtice i al j y el
peso asociado al vrtice i asumiendo que se ha llegado a l mediante la arista j y se sale de l mediante
la arista k

Los algoritmos A* tratan con una idea ms general que llamaremos ruta que pasa por un vrtice dado.
Una ruta viene definida por un camino que va desde el vrtice inicial a un vrtice intermedio (vrtice
actual) y una estimacin del costo del camino hasta el vrtice final. Si la ruta est definida por el vrtice
inicial al vrtice final y pasando por un vrtice actual entonces la longitud de la misma es la suma del
coste ya conocido del camino C que va de a ms el coste estimado para llegar al final.

Referencias

https://rodas5.us.es/file/0763b67a-40ea-4203-b430-3f18c74c3387/1/Tema%2013%20-
%20Colecciones%20II.%20Grafos.pdf

https://repositorio.unican.es/xmlui/bitstream/handle/10902/3102/Carlos%20Maria%20Rabadan%
20Cebolla.pdf?sequence=1

http://btocastro.blogspot.com/2011/07/algoritmos-de-caminos-minimos-en-grafos.html

https://grafos-caminosminimos.wikispaces.com/C.M.+-+Algoritmo+de+Dijkstra

Das könnte Ihnen auch gefallen