Escolar Documentos
Profissional Documentos
Cultura Documentos
Algoritmo de Floyd-Warshall
A partir de la matriz de distancias entre nodos de una red se busca obtener la matriz de distancia mnima entre cualquier par de nodos. Tambin se quiere calcular todas las rutas de distancia mnima entre cualquier par de nodos.
Algoritmo de Floyd-Warshall
En el grafo (V,E) V = Conjunto de vrtices. E = Conjunto de arcos dirigidos entre vrtices. w(i,j) = peso del arco desde i hasta j , con i, j E.
Algoritmo de Floyd-Warshall
Si n es el nmero de nodos de la red, en la fase de inicializacin del algoritmo, el grafo est representado por una matriz n x n de pesos calculados como:
0 i, j
si i si i
j j con i , j E j con i E o j E
w( i , j ) si i
Las matrices D(k) guardan las distancias mnimas entre parejas de nodos y la matriz pred guarda un nodo intermedio entre parejas de nodos.
Ejemplo
Inicializacin
MATRIZ DISTANCIAS
A 4 2 B 4 3 C 2 1 2 D 1 3 2 E 2 4 F 2 4 -
MATRIZ RECORRIDOS
A A A A A A B B B B B B C C C C C C D D D D D D E E E E E E F F F F F F -
A B C D E F
A B C D E F
Iteracin A
MATRIZ DISTANCIAS
A 4 2 B 4 3 C 2 1 2 D 1 3 2 E 2 4 F 2 4 -
MATRIZ RECORRIDOS
A A A A A A B B B B B B C C C C C C D D D D D D E E E E E E F F F F F F -
A B C D E F
A B C D E F
Iteracin B
MATRIZ DISTANCIAS
A 4 2 B 4 6 3 C 2 6 1 2 D 1 3 2 E 2 4 F 2 4 -
MATRIZ RECORRIDOS
A A A A A A B B A B B B C C A C C C D D D D D D E E E E E E F F F F F F -
A B C D E F
A B C D E F
Iteracin C
MATRIZ DISTANCIAS
A 4 2 7 B 4 6 3 C 2 6 1 2 D 1 3 2 E 2 4 F 2 4 -
MATRIZ RECORRIDOS
A A A B A A B B A B B B C C A C C C D D D D D D E E E E E E F F F F F F -
A B C D E F
A B C D E F
10
Iteracin F (Fin)
MATRIZ DISTANCIAS
A 4 2 3 4 5 B 4 6 3 8 5 C 2 6 1 2 3 D 3 7 1 3 2 E 4 8 2 3 4 F 5 9 3 2 4 -
MATRIZ RECORRIDOS
A A A C C D B B A B C D C C A C C D D C C D D D E C C E C E F D D D F F -
A B C D E F
A B C D E F
11
Para ir del nodo A al nodo J: la distancia mnima es 9. un recorrido ptimo es: B-AC-D-F. Este recorrido se recupera analizando la matriz de predecesores:
Entre B y F es D Entre B e D es C Entre B y C es A Entre B y A es
MATRIZ RECORRIDOS
A A A C C D B B A B C D C C A C C D D C C D D D E C C E C E F D D D F F -
A B C D E F
12
Algoritmo de Floyd-Warshall
Floyd-Warshall ( ,n) { for i=1 to n do for j=1 to n do { D0[i,j]= [i,j]; pred[i,j]=nil; } for k=1 to n do for i=1 to n do for j=1 to n do if ( D(k-1)[i,k]+ D(k-1)[k,j] < D(k-1)[i,j] ) {D(k)[i,j] = D(k-1)[i,k]+ D(k-1)[k,j] ; pred[i,j] = k;} else D(k)[i,j] = D(k-1)[i,j]; return D(n)[1,,n, 1,,n]; }