Anda di halaman 1dari 6

Algoritmo de Floyd-Warshall

Estudiaremos un enfoque de programacin dinmica para resolver el problema de los


caminos de costo mnimo entre cualquier par de vrtices de un grafo G=(V, E). El
algoritmo de Floyd-Warshall es (V3). En el grafo pueden existir arcos de costo
negativo, pero se asume que no hay ciclos de costo negativo. Se sigue un proceso de
programacin dinmica para el desarrollo del algoritmo.

La estructura de un camino de costo mnimo.

El algoritmo considera los vrtices intermedios de un camino de costo mnimo donde
un vrtice intermedio de un camino simple p=<v
1
, v
2
, , v
l
> es cualquier vrtice de p
distinto de v
1
y v
l
, o sea, cualquier vrtice del conjunto {v
2
, v
3
,..., v
l-1
}.

El algoritmo de Floyd-Warshall se basa en la siguiente observacin. Asumiendo que los
vrtices del grafo G se numeran de la siguiente forma V={1, 2, 3, , n}. Consideremos
el siguiente subconjunto de vrtices {1, 2,..., k} para algn cierto k. Para cualquier par
de vrtices i, jV consideremos todos los caminos de i a j cuyos vrtices intermedios
tienen nmeros entre {1, 2,..., k} (o sea entre los vrtices intermedios no hay ninguno
con nmero mayor que k) y sea p un el camino simple de costo mnimo entre todos
esos caminos. El algoritmo de Floyd-Warshall explota una relacin entre p y los
caminos de costo mnimo entre i e j cuyos vrtices intermedios estn entre {1, 2,..., k-
1}. La relacin depende de si k est o no entre los vrtices intermedios de p.

Si k no es un vrtice intermedio en el camino p, entonces todos los vrtices
intermedios en dicho camino estn en el conjunto {1, 2,..., k - 1}. Por tanto un
camino de costo mnimo del vrtice i al j con todos los vrtices intermedios
entre {1, 2,..., k - 1} es tambin un camino de costo mnimo de i a j con todos los
vrtices intermedios en el conjunto {1, 2,..., k}.
Si k es un vrtice intermedio en el camino p, entonces dicho camino se parte en dos
subcaminos p
1
y p
2
como se muestra en la figura 25.3.



Fig. 25.3 El camino p es un camino de costo mnimo del vrtice i al j, y k es el vrtice intermedio de
mayor numeracin de p. El camino p
1
, la porcin de p que conecta a i con k y p2, tiene todos los vrtices
intermedios con nmeros en el conjunto {1, 2,..., k - 1} la porcin de p que conecta a k con j. Lo mismo
se cumple para el camino p2 que conecta al vrtice k con el j

Por el Lema 24.1 p
1
es un camino de costo mnimo de i a k con los vrtices
intermedios en {1, 2,..., k - 1}. Como el vrtice k no es un vrtice intermedio del
camino p
1
, vemos que p
1
es un camino de costo mnimo de i a k con todos los
vrtices intermedios en el conjunto {1, 2,..., k - 1}. De manera similar, p
2
es un
camino de costo mnimo del vrtice k al j con todos los vrtices intermedios en
el conjunto {1, 2,..., k - 1}.

Una solucin recursiva al problema de los caminos costo mnimo entre cualquier
par de vrtices del grafo.

Basado en las observaciones que se acaban de hacer, se establece una formulacin
recursiva del problema de los caminos de costo mnimo estimados que es diferente a la
vista con anterioridad en la solucin de otros problemas. Sea d
(k)
ij
el costo de un camino
de costo mnimo entre el vrtice i y el j para el cual todos los vrtices intermedios estn
en el conjunto {1, 2,..., k}. Cuando k=0, un camino de i a j no tiene vrtices intermedios.
Dicho camino, a lo sumo tiene un arco y por tanto d
(0)
ij
=w
ij
. Una definicin recursiva de
lo expresado anteriormente es la que sigue

(25.5)

Determinando los costos de los caminos de costo mnimo siguiendo una estrategia
bottom up (de abajo hacia arriba).

Basado en la recurrencia (25.5) el siguiente procedimiento bottom-up puede ser usado
para calcular los valores d
(k)
ij
en orden creciente de los valores de k. La entrada es una
matriz W de orden n x n tal que, en la diagonal principal todos los valores son 0, si
existe un arco entre i e j entonces W[i, j] = w
i,j
y en caso contrario W[i, j]=. El
procedimiento retorna la matriz de caminos de costo mnimo D
(0)
.

FLOYD-WARSHALL(W)
1 n rows[W]
2 D
(0)
W
3 for k 1 to n
4 do for i 1 to n
5 do for j 1 to n
6 do
7 return D
(n)


La Figura 25.4 muestra las matrices D
(k)
calculados por el algoritmo de Floyd-Warshall
para el grafo de la Figura 25.1




La figura 25.4: La secuencia de matrices D
(k)
y
(k)
calculadas por el algoritmo de
Floyd-Warshall para el grafo de la figura 25.1

El tiempo de ejecucin del algoritmo de Floyd-Warshall esta determinado por el tripe
ciclo anidado de las lneas 3-6. Debido a que cada ejecucin de la lnea 6 es O(1), el
algoritmo se ejecuta en orden (n
3
). Con una constante pequea. Por tanto el algoritmo
es incluso muy prctico para grafos de entrada de tamao moderado.

Algunas definiciones.

Tal como vimos el subgrafo predecesor G para el problema de los caminos de costo
mnimo con un solo origen, el subgrafo inducido por la i-sima fila de la matriz debe
ser un rbol de caminos de costo mnimo con raz i. Para cada vrtice iV se define el
subgrafo predecesor de G para i como Gi = (V.i, E.i), donde

V.i ={jV : ij = NIL} {i} y E.i ={(ij, j) : j V.i - {i}}

Si G.i es un rbol de caminos de costo mnimo el siguiente procedimiento, el cual es
una versin modificada de PRINT-PATH, imprime un camino de costo del vrtice i al
vrtice j.






PRINT-ALL-PAIRS-SHORTEST-PATH(, i , j )
1 if i = j
2 then print i
3 else if ij = NIL
4 then print "no path from" i "to" j "exists"
5 else PRINT-ALL-PAIRS-SHORTEST-PATH(, i, ij)
6 print j

Construyendo un camino de costo mnimo.

Hay una variedad de mtodos diferentes para construir los caminos de costo mnimo en
el algoritmo de Floyd-Warshall. Una forma es calculando la matriz D de costos de los
caminos de costo mnimo y entonces construir la matriz predecesor a partir de D. Este
mtodo puede implementarse en O(n
3
). Dada la matriz predecesor el procedimiento
PRINT-ALL-PAIRSSHORTEST-PATH puede ser usado para imprimir los vrtices de
un camino de costo mnimo dado.

La matriz predecesor se puede calcular on-line de la misma forma que el algoritmo de
Floyd-Warshall calcula las matrices D
(k)
. Especificamente se calcula una secuencia de
matrices
(0)
,
(1)
,...,
(n)
, donde =
(n)
y
(k)
ij
se define como el predecesor del
vrtice j en un camino de costo mnimo que parte de i y tiene vrtices intermedios con
nmeros en el conjunto {1, 2,..., k}.

(k)
ij
puede formularse recursivamente. Cuando k=0, un camino de costo mnimo de i a
j no tiene vrtices intermedios. Por tanto,

(25.6)

Para k 1, si se toma el camino i .... k . j, con k j , entonces el predecesor de j que se
selecciona es el mismo predecesor de j que se seleccionara en un camino de costo
mnimo desde k con vrtices intermedios en el conjunto {1, 2,..., k-1}. En otro caso,
seleccionados el mismo predecesor de j que se seleccionara en un camino de costo
mnimo desde i con todos los vrtices intermedios en el conjunto {1, 2,..., k-1}.
Formalmente para k 1,

(25.7)

Se deja como ejercicio prctico incorporar el clculo de las matrices
(k)
al algoritmo de
FLOYD-WARSHAL. La figura 25.4 muestra la secuencia de matrices
(k)
que el
algoritmo que se acaba de mencionar deber calcular para el grafo mostrado en la figura
25.1. En el ejercicio tambin se pide probar que el subgrafo predecesor G,i es un rbol
de costo mnimo con raz en i.

Clausura transitiva de un grafo dirigido.

Dado un grafo dirigido G = (V, E) con el conjunto de vrtices V = {1, 2,...,n}, quizs se
desee saber si existe o no un camino en G entre cualquier par de vrtices i, jV. La
clausura transitiva de G se define como el grafo G* = (V, E*), donde E*= {(i, j): existe
un camino del vrtice i al j en G}.

Una forma de calcular la clausura transitiva de un grafo en orden (n
3
) es asignar un
costo 1 a cada arco de E y ejecutar el algoritmo de Floyd-Warshall. Si existe un camino
de i a j, obtendramos dij < n. En otro caso, dij = .

Existe otra forma similar de calcular la clausura transitiva de un grafo G en (n
3
). La
esencia del mtodo es sustituir en el algoritmo de Floy-Warshall las operaciones min y
+ por las operaciones lgicas (OR) y (AND). Para i, j, k = 1, 2,...,n, se define t
(k)
ij
=
1 si existe un camino en G de i a j con vrtices intermedios en el conjunto {1, 2,..., k} y
t
(k)
ij
= 0 en otro caso. La clausura transitiva G* = (V, E*) se construye insertando el
arco (i, j) en E* si y solo si t
(n)
ij
= 1. Una definicin recursiva para t
(k)
ij
anloga la
recurrencia (25.5) es la siguiente,


y para k1,

(25.8)

Como en el algoritmo de Floyd-Warshall se calculan las matrices en orden
creciente de k.

TRANSITIVE-CLOSURE(G)
1 n |V[G]|
2 for i 1 to n
3 do for j 1 to n
4 do if i = j or (i, j) _ E[G]
5 then t
( 0)
i j
1
6 else t
( 0)
i j
0
7 for k 1 to n
8 do for i 1 to n
9 do for j 1 to n
10 do
11 return T(n)

La figura 25.5 muestra las matrices T
(k)
calculadas en el procedimiento TRANSITIVE-
CLOSURE al ejecutarse sobre un grafo dado como ejemplo. TRANSITIVE-
CLOSURE, al igual que el algoritmo de Floy-Warshall, es (n
3
). Sin
embargo, sobre determinadas mquinas, las operaciones lgicas sobre bits se ejecutan
ms rpido que las operaciones aritmticas. Ms an, tomando en consideracin que el
algoritmo TRANSITIVE-CLOSURE usa solo valores boleanos de valores enteros, los
requerimientos espaciales son menos que en el algoritmo de Floy-Warshall con un
factor correspondiente al tamao de palabra de la arquitectura de la mquina.


Figura 25.5 Un grafo dirigido y las matrices T(k) calculadas por el algoritmo
TRANSITIVE-CLOSURE