Professional Documents
Culture Documents
Lógica Matemática
Sede Belmonte
Risaralda - Pereira
2018
Grafo de Floyd-Warshall
Lógica Matemática
Sede Belmonte
Risaralda - Pereira
2018
Tabla de contenido
Introducción..................................................................................................................................... 4
Algoritmo de Floyd-Warshall ...................................................................................................... 5
Características ............................................................................................................................ 5
Función ......................................................................................................................................... 6
Aplicaciones ................................................................................................................................ 7
El Algoritmo de Warshall.............................................................................................................. 8
El Algoritmo de Floyd.................................................................................................................... 8
Robert W. Floyd: ......................................................................................................................... 9
Pseudocódigo del algoritmo Floyd-Warshall ................................................................... 14
Código C++ del algoritmo Floyd-Warshall......................................................................... 15
Ejemplo ................................................................................................................................... 16
Bibliografía ..................................................................................................................................... 22
Introducción
Las técnicas heurísticas para recorrido de grafos han sido utilizadas en muchas
aplicaciones como la solución de circuitos eléctricos, en la exploración de entornos
en robótica móvil, en el control de información en redes Informáticas, entre otras.
Esto se debe a que todos los sistemas mencionados pueden ser modelados como
grafos. Esto también es aplicable en el caso de las redes de distribución, donde
cada nodo en la red de distribución es un nodo del grafo, y cada línea entre los
nodos de la red de distribución, es un arco en el grafo. Para este caso se
consideraron redes radiales, que son las más comunes en las redes de distribución,
por lo que en los grafos no se obtenían trayectorias cerradas.
Algoritmo de Floyd-Warshall
Características
Obtiene la mejor ruta entre todo par de nodos.
Trabaja con la matriz D inicializada con las distancias directas entre todo par de
nodos.
Función
Compara todos los posibles caminos a través del grafo entre cada par de vértices.
El algoritmo es capaz de hacer esto con sólo V3 comparaciones, lo hace mejorando
una estimación del camino más corto entre dos vértices, hasta que se sabe que la
estimación es óptima.
Hay dos candidatos para este camino: un camino mínimo, que utiliza únicamente
los vértices del conjunto (1...k); o bien existe un camino que va desde i hasta k + 1,
después de k + 1 hasta j que es mejor. Sabemos que el camino óptimo de i a j que
únicamente utiliza los vértices de 1 hasta k está definido por caminoMinimo(i, j,k), y
está claro que si hubiera un camino mejor de i a k + 1 a j, la longitud de este camino
sería la concatenación del camino mínimo de i a k + 1 (utilizando vértices de (1...k))
y el camino mínimo de k + 1 a j (que también utiliza los vértices en (1...k)).
Para que haya coherencia numérica, Floyd-Warshall supone que no hay ciclos
negativos (de hecho, entre cualquier pareja de vértices que forme parte de un ciclo
negativo, el camino mínimo no está bien definido porque el camino puede ser
infinitamente pequeño). No obstante, si hay ciclos negativos, Floyd-Warshall puede
ser usado para detectarlos. Si ejecutamos el algoritmo una vez más, algunos
caminos pueden decrementarse, pero no garantiza que, entre todos los vértices,
caminos entre los cuales puedan ser infinitamente pequeños, el camino se reduzca.
Si los números de la diagonal de la matriz de caminos son negativos, es condición
necesaria y suficiente para que este vértice pertenezca a un ciclo negativo
Aplicaciones
El algoritmo de Floyd-Warshall puede ser utilizado para resolver los siguientes
problemas:
Encontrar una expresión regular dada por un lenguaje regular aceptado por un
autómata finito (algoritmo de Kleene).
Ruta óptima. En esta aplicación es interesante encontrar el camino del flujo máximo
entre 2 vértices. Esto significa que en lugar de tomar los mínimos con el
pseudocódigo anterior, se coge el máximo. Los pesos de las aristas representan las
limitaciones del flujo. Los pesos de los caminos representan cuellos de botella; por
ello, la operación de adición anterior es reemplazada por la operación mínimo.
El Algoritmo de Warshall
El algoritmo de Warshall es un ejemplo de algoritmo booleano. A partir de una tabla
inicial compuesta de 0`s (no hay correspondencia inicial en el grafo) y 1`s (hay una
correspondencia, llamase “flecha”, entre nodos), obtiene una nueva matriz
denominada “Matriz de Clausura Transitiva” en la que se muestran todas las
posibles uniones entre nodos, directa o indirectamente. Es decir, si de “A” a “B” no
hay una “flecha”, es posible que si haya de “A” a “C” y luego de “C” a “B”. Luego,
este resultado se verá volcado en la matriz final.
El Algoritmo de Floyd
El algoritmo de Floyd es muy similar, pero trabaja con grafos ponderados. Es decir,
el valor de la “flecha” que representamos en la matriz puede ser cualquier entero o
infinito. Infinito marca que no existe unión entre los nodos. Esta vez, el resultado
será una matriz donde estarán representadas las distancias mínimas entre nodos,
seleccionando los caminos más convenientes según su ponderación (“peso”). Por
ejemplo, si de “A” a “B” hay 36 (km), pero de “A” a “C” hay 2(km) y de “C” a “B” hay
10 (km), el algoritmo nos devolverá finalmente que de “A” a “B” hay 12 (km).
Los pasos a dar en la aplicación del algoritmo de Floyd son los siguientes:
* Se toma k=1.
* La matriz final C contiene los costes óptimos para ir de un vértice a otro, mientras
que la matriz D contiene los penúltimos vértices de los caminos óptimos que unen
dos vértices, lo cual permite reconstruir cualquier camino óptimo para ir de un vértice
a otro.
Robert W. Floyd:
Nació el 8 de junio de 1936 en Nueva York, es profesor de la Stanford University
(B.A. Chicago 1955 B.S. Chicago 1958), y en 1978 fue galardonado con el
prestigioso premio A.M. Turing que otorga la ACM para reconocer las contribuciones
de naturaleza técnica realizadas a la comunidad informática. El premio le fue
concedido por tener una influencia clara en las metodologías para la creación de
software eficiente y fiable, y por ayudar a fundar las siguientes áreas de la
informática: teoría de análisis sintáctico, semántica de los lenguajes de
programación, verificación automática de programas, síntesis automática de
programas y análisis de algoritmos.
Fue uno de los inventores del deterministic linear time selection algorithm. También
introdujo mejoras en los algoritmos quicksort y quickselect.
Paso a paso
Segundo paso:
Inicializamos la matriz de predecesores
p 1 2 3 4
1 X X X X
2 X X X X
3 X X X X
4 X X X X
j
Tercer paso
Se elaboran nuevas tablas de distancia y predecesores de esta manera
d 0 1 2 3
0 0 5 ∞ ∞
i 50 0 15 5
1
2 30 ∞ 0 15
3 15 ∞ 5 0
p 0 1 2 3
0 X X X X
1 X X X X
2 X X X X
3 X X X X
j
La idea es realizar iteraciones para cambiar el valor de los ∞ decir que para este
grafo se deben realizar 4 iteraciones.
Cuarto paso: k=0; i=2; j=1;
Primera Iteración: k=0; i=2; j=1;
D (2,1) < D (2,0) + D (0,1)?→ ∞<30+5? →D(2,1)= 35
d 0 1 2 3
0 0 5 ∞ ∞
50 0 15 5
1
2 30 35 0 15
3 15 ∞ 5 0
p 0 1 2 3
0 X X X X
1 X X X X
2 X 0 X X
3 X X X X
Quinto paso: k=0; i=3; j=1
D (3,1) < D (3,0) + D (0,1)? =>∞<15+5? => D(3,1)= 20
d 0 1 2 3 p 0 1 2 3
0 0 5 ∞ ∞ 0 X X X X
50 0 15 5 1 X X X X
1 2 X 0 X X
2 30 35 0 15 3 X 0 X X
3 15 20 5 0
d 0 1 2 3 p 0 1 2 3
0 0 5 20 10 0 X X 1 1
50 0 15 5 1 X X X X
1 2 X 0 X X
2 30 35 0 15 3 X 0 X X
3 15 20 5 0
d 1 2 3 4 p 1 2 3 4
1 0 5 15 10 1 -1 -1 4 2
20 0 10 5 2 4 -1 4 -1
2 3 -1 1 -1 -1
3 30 35 0 15 4 -1 1 -1 -1
4 15 20 5 0
2(infinito si no existe).
5 int camino[ ][ ];
8 pesoArista(i,j)
9 */
10 procedimiento FloydWarshall ()
11 para k: = 0 hasta n − 1
// Devuelve una matriz con las distancias mínimas de cada nodo al resto de los
vértices.
path[i][i] = 0;
path[i][j] = dt;
return path;
Ejemplo
https://es.wikipedia.org/wiki/Algoritmo_de_Floyd-Warshall
https://www.ecured.cu/Floyd-Warshall
https://estructurasite.wordpress.com/algortimo-de-floyd-warshall/
Cormen, Thomas H.; Leiserson, Charles E.; Rivest, Ronald L. (1990). Introduction
to Algorithms (1º Edición). Sección 26.2, "The Floyd–Warshall algorithm".