You are on page 1of 2

Algoritmo de Floyd

Sirve para hallar las m nimas distancias entre todos los vrtices de un grafo valorado e (G, f ), con G = (V, E), de n vrtices V = {v1 , v2 , ..., vn } con valores positivos, es decir e f : E R+ . Formalmente, la entrada del algoritmo es la matriz de adyacencia n n M = (aij ), que en cada entrada aij guarda el valor de la echa vi vj E. El algoritmo utiliza como recurso una matriz del mismo tama o que la matriz de adyacencia, la matriz de n resultados parciales D = (dij ). Al inicio, la matriz de resultados parciales toma el valor de la matriz de adyacencia, es decir, dij = aij . El cuerpo del algoritmo es un bucle indexado por k, tal que en la iteracin k-sima se compara la suma (componente a componente) o e de la la y columna k-simas de la matriz de resultados parciales, quedndose con e a el m nimo. El resultado del algoritmo, al nal del bucle, es la matriz de resultados parciales, que coincidir con la matriz de m a nimas distancias. En pseudocdigo, representando la entrada dij de la matriz de resultados parciales o D por D[i, j], se tiene: Para k = 0 hasta n hacer { Para i = 0 hasta n hacer { Para j = 0 hasta n hacer { D[i,j] = mnimo(D[i,j],D[i,k] + D[k,j]) } } } [Referencia: http://es.wikipedia.org/wiki/Algoritmo de Floyd-Warshall]

La validez del algoritmo se demuestra teniendo en cuenta el signicado de la entrada dij de la matriz de resultados parciales al nal de la iteracin k-sima: es el valor del o e camino entre vi y vj , que sea m nimo entre los que pueden opcionalmente utilizar, como vrtices intermedios, los del conjunto {v1 , v2 , ..., vk }. Es decir dij = m (C)), siendo C e n(f del conjunto de caminos entre vi y vj que utiliza, como mucho, los k primeros vrtices. e Que se cumple esta propiedad es fcil de ver en la primera iteracin (k = 1), porque a o el valor ai1 + a1j que resulta de sumar la primera la y la primera columna de la matriz de resultados parciales (que al inicio coincide con la matriz de adyacencia) es el valor del camino vi v1 vj . Por lo tanto al hacer el m nimo m (vi vj ), f (vi v1 vj )), n(f queda el valor del camino m nimo entre los que pueden usar el vrtice v1 . Se puede utilizar e el s mbolo corchete [] para representar estas opciones de caminos en una expresin: o vi [v1 ]vj . Al nal de la iteracin 1, dij tiene el valor del m o nimo camino. En la segunda iteracin, al hacer el m o nimo se compara el valor de esos caminos con los de vi [v1 ]v2 [v1 ]vj , que podemos representas con la expresin o vi [v1 |v2 ] vj (La barra | separa diversas opciones, y el asterisco * indica que pueden repetirse la eleccin de opciones varias veces). Por tanto, dij al nal de la segunda o iteracin contiene el valor del m o nimo camino entre vi y vj que utiliza, opcionalmente, los vrtices v1 y v2 . e En general, por induccin sobre k, el valor de dij al nal de la iteracin k-sima es o o e el m nimo de dos n meros: el primero es el valor de dij en la iteracin anterior (que se u o corresponde, por induccin, con un camino m o nimo de de la forma vi [v1 |v2 |...|vk1 ] vj ); el segundo n mero es una suma que se corresponde con el m u nimo camino de la forma vi [v1 |v2 |...|vk1 ] vk [v1 |v2 |...|vk1 ] vj . Por tanto el resultado de esa comparacin se corresponde con el m o nimo camino entre los descritos por la expresin vi [v1 |v2 |...|vk ] vj , porque un camino m o nimo slo pasa una vez, como mucho, por cada vrtice. Por tanto, en la iteracin nal (k = n) o e o contiene el valor del camino m nimo usando cualesquiera de los vrtices de G, que es el e resultado buscado.

You might also like