Algoritmo Camino Minimo
Algoritmo Camino Minimo
Algoritmo Camino Minimo
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
Ejemplo
El siguiente ejemplo se desarrollar con el fin de encontrar el camino ms corto desde a hasta z:
Leyenda:
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
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