1
Algoritmo de Floyd Optimización en Ingeniería II Eliseo Fustamante Blanco
Algoritmo de Floyd
2
El algoritmo de Floyd es mas general que el de Dijkstra, ya que determina la ruta mas corta entre dos nodos cualquiera de la red.
El algoritmo representa una red de n de n nodos nodos como una matriz cuadrada de orden n, orden n, la la llamaremos matriz C matriz C.. De esta forma, el valor de Cij de Cij representa representa el coste de ir del desde el nodo i nodo i al al nodo j, nodo j, inicialmente inicialmente en caso de no existir un arco entre ambos, el valor de Cij de Cij será será infinito. Definiremos otra matriz D, matriz D, también también cuadrada de orden n, orden n, cuyos cuyos elementos van a ser los nodos predecesores en el camino hacia el nodo origen, es decir, el valor de Dij representara el nodo predecesor a j en el camino mínimo desde i desde i hasta hasta j. j. Las di Las diag agon onal ales es de am amba bass ma matr tric ices es re repr pres esen enta tan n el co cost ste e y el no nodo do predecesor para ir de un nodo a si mismo. Por lo que no sirven para nada, estarán bloqueadas.
Algoritmo de Floyd
2
El algoritmo de Floyd es mas general que el de Dijkstra, ya que determina la ruta mas corta entre dos nodos cualquiera de la red.
El algoritmo representa una red de n de n nodos nodos como una matriz cuadrada de orden n, orden n, la la llamaremos matriz C matriz C.. De esta forma, el valor de Cij de Cij representa representa el coste de ir del desde el nodo i nodo i al al nodo j, nodo j, inicialmente inicialmente en caso de no existir un arco entre ambos, el valor de Cij de Cij será será infinito. Definiremos otra matriz D, matriz D, también también cuadrada de orden n, orden n, cuyos cuyos elementos van a ser los nodos predecesores en el camino hacia el nodo origen, es decir, el valor de Dij representara el nodo predecesor a j en el camino mínimo desde i desde i hasta hasta j. j. Las di Las diag agon onal ales es de am amba bass ma matr tric ices es re repr pres esen enta tan n el co cost ste e y el no nodo do predecesor para ir de un nodo a si mismo. Por lo que no sirven para nada, estarán bloqueadas.
Algoritmo de Floyd
3
Los pasos para la aplicación del algoritmo de Floyd:
Formar las matrices matrices C C y y D. D. Se toma k. Se selecciona la fila y la columna columna k k de de la matriz C matriz C y y entonces para i para i y y j j hacemos: hacemos:
SI (Cik + Ckj) < Cij
Dij = Dkj
y Cij=Cik + Ckj En caso contrario, dejamos las matrices como están. Si k<= n, aumentamos Si k<= n, aumentamos k en una unidad y repetimos el paso anterior, en caso contrario paramos las iteraciones. La matriz final C final C contiene contiene los costes óptimos para ir de un vértice a otro, mientras que la matriz D matriz D contiene contiene los penúltimos vértices de los caminos óptimos que unen dos vértices, lo cual permite reconstruir cualquier camino optimo para ir de un vértice a otro
Ejemplo 1
4
Tenemos el siguiente grafo direccional: B 5 A
3 6
D
4
1
C
2
E
Ejemplo 1
5
Se generan las siguientes tablas
Pesos
Recorrido
C
A
B
C
D
E
D
A
B
C
D
E
A
-
5
1
∞
∞
A
A
B
C
D
E
B
∞
-
∞
3
∞
B
A
B
C
D
E
C
∞
∞
-
∞
2
C
A
B
C
D
E
6
∞
∞
-
4
D
A
B
C
D
E
∞
∞
∞
∞
-
E
A
B
C
D
E
D E
Ejemplo 1
6
Tomamos la primera fila y la primera columna
C
A
B
C
D
E
D
A
B
C
D
E
A
-
5
1
∞
∞
A
A
B
C
D
E
B
∞
-
∞
3
∞
B
A
B
C
D
E
C
∞
∞
-
∞
2
C
A
B
C
D
E
6
∞
∞
-
4
D
A
B
C
D
E
∞
∞
∞
∞
-
E
A
B
C
D
E
D E
Ejemplo 1
7
K=A
En la base a la fila y columna de A, tenemos que sumar los valores para dar con el valor mínimo. Tenemos que tener en cuenta que un valor n +
∞=∞
En Cij tenemos: C1,4 +C2,1=6+5=11=C2,4. En la tabla D, se cambia D2,4 por A. C1,4+C3,1=6+1=7=C3,4, se cambia D3,4 por A. Las sumas con C4,1 y C5,1 no se realizan porque tienen
∞
C
A
B
C
D
E
D
A
B
C
D
E
A
-
5
1
∞
∞
A
A
B
C
D
E
B
∞
-
∞
3
∞
B
A
B
C
D
E
C
∞
∞
-
∞
2
C
A
B
C
D
E
6
11
7
-
4
D
A
A
A
D
E
∞
∞
∞
∞
-
E
A
B
C
D
E
D E
Ejemplo 1
8
Filas y columnas de B. C
A
B
C
D
E
D
A
B
C
D
E
A
-
5
1
∞
∞
A
A
B
C
D
E
B
∞
-
∞
3
∞
B
A
B
C
D
E
C
∞
∞
-
∞
2
C
A
B
C
D
E
D
6
11
7
-
4
D
A
A
A
D
E
∞
∞
∞
∞
-
E
A
B
C
D
E
E
Ejemplo 1
9
K=B
Vemos que la relación esta en forma de cruz. Nos enfocaremos en las operaciones que si se pueden realizar. C2,1 +C4,1=5+3=8=C4,1. La celda D4,1 se vuelve B. Un caso especial es: C2,4 +C4,2=11+3=14. Sin embargo se declaro que C4,4 nulo por lo que sigue así. El resto de valores sigue como por el momento ∞
C
A
B
C
D
E
D
A
B
C
D
E
A
-
5
1
8
∞
A
A
B
C
B
E
B
∞
-
∞
3
∞
B
A
B
C
D
E
C
∞
∞
-
∞
2
C
A
B
C
D
E
D
6
11
7
-
4
D
A
A
A
D
E
∞
∞
∞
-
E
A
B
C
D
E
E
∞
Ejemplo 1
10
Fila y columna de C C
A
B
C
D
E
D
A
B
C
D
E
A
-
5
1
8
∞
A
A
B
C
B
E
B
∞
-
∞
3
∞
B
A
B
C
D
E
C
∞
∞
-
∞
2
C
A
B
C
D
E
D
6
11
7
-
4
D
A
A
A
D
E
∞
∞
∞
-
E
A
B
C
D
E
E
∞
Ejemplo 1
11
K=C Vemos que la relación esta en forma de cruz. Nos enfocaremos en las operaciones que si se pueden realizar. C3,1 +C5,3=1+2=3=C5,1. La celda D5,1 se vuelve C. C3,4 +C5,3=7+2=9=C5,4. Sin embargo, el valor resultante es mayor que el valor que se encuentra ya en la celda por lo que no se realiza ningún cambio. Esto ocurre por que tenemos que buscar el valor mínimo. C
A
B
C
D
E
D
A
B
C
D
E
A
-
5
1
8
3
A
A
B
C
B
C
B
∞
-
∞
3
∞
B
A
B
C
D
E
C
∞
∞
-
∞
2
C
A
B
C
D
E
D
6
11
7
-
4
D
A
A
A
D
E
∞
∞
∞
-
E
A
B
C
D
E
E
∞
Ejemplo 1
12
Fila y columna de D C
A
B
C
D
E
D
A
B
C
D
E
A
-
5
1
8
3
A
A
B
C
B
C
B
∞
-
∞
3
∞
B
A
B
C
D
E
C
∞
∞
-
∞
2
C
A
B
C
D
E
D
6
11
7
-
4
D
A
A
A
D
E
∞
∞
∞
-
E
A
B
C
D
E
E
∞
Ejemplo 1
13
K=D
Vemos que la relación esta en forma de cruz. Nos enfocaremos en las operaciones que si se pueden realizar. C4,2 +C1,4=3+6=9=C1,2. La celda D1,2 se vuelve D. C4,2 +C3,5=3+7=10=C3,2. La celda D3,2 se vuelve D. C4,2 +C5,4=3+4=7=C5,2. La celda D5,2 se vuelve D. El valor de C4,1(8)+C5,4(4) dan un resultado de 12, pero no se procesa al ser mayor al valor C5,1(3, al igual que en el caso de C4,1(8)+C2,4(11). C
A
B
C
D
E
D
A
B
C
D
E
A
-
5
1
8
3
A
A
B
C
B
C
B
9
-
10
3
7
B
D
B
D
D
D
C
∞
∞
-
∞
2
C
A
B
C
D
E
D
6
11
7
-
4
D
A
A
A
D
E
∞
∞
∞
-
E
A
B
C
D
E
E
∞
Ejemplo 1
14
Fila y columna de E C
A
B
C
D
E
D
A
B
C
D
E
A
-
5
1
8
3
A
A
B
C
B
C
B
9
-
10
3
7
B
D
B
D
D
D
C
∞
∞
-
∞
2
C
A
B
C
D
E
D
6
11
7
-
4
D
A
A
A
D
E
∞
∞
∞
-
E
A
B
C
D
E
E
∞
Ejemplo 1
15
K=E Llegamos al punto en que termina el proceso E. esto sucedió debido a que los valores de la fila E son valores infinitos, por lo que cualquier operación ahora es nula.
C
A
B
C
D
E
D
A
B
C
D
E
A
-
5
1
8
3
A
A
B
C
B
C
B
9
-
10
3
7
B
D
B
D
D
D
C
∞
∞
-
∞
2
C
A
B
C
D
E
D
6
11
7
-
4
D
A
A
A
D
E
∞
∞
∞
-
E
A
B
C
D
E
E
∞
Ejemplo 1
16
Finalmente tenemos. C
A
B
C
D
E
D
A
B
C
D
E
A
-
5
1
8
3
A
A
B
C
B
C
B
9
-
10
3
7
B
D
B
D
D
D
C
∞
∞
-
∞
2
C
A
B
C
D
E
D
6
11
7
-
4
D
A
A
A
D
E
∞
∞
∞
-
E
A
B
C
D
E
E
∞
Ejemplo 1
17
Pero: ¿Por qué la fila E se quedo igual con los valores infinitos? ¿Por qué en la fila C solo cambio una celda? Para entender el porque de estas incógnitas, veamos el grafico nuevamente: B
Grafico:
5
Como podemos ver, el vértice E solo recibe pero no envía ningún valor, lo cual explica que tenga valores infinitos.
A
El vértice C solo envía un valor 2 a E, siendo un único valor valido.
1 C
3 6
D 4 2
E
Ejemplo 1
18
Grafico y tabla: C
A
B
C
D
E
D
A
B
C
D
E
A
-
5
1
8
3
A
A
B
C
B
C
D
B
D
D
D
B
9
-
10
3
7
B
C
∞
∞
-
∞
2
C
A
B
C
D
E
D
6
11
7
-
4
D
A
A
A
D
E
∞
∞
∞
∞
-
E
A
B
C
D
E
E
B 5 A
3 6
D 4
1 C
2
E
Ejemplo 2
19
Aplicar el Algoritmo de Floyd sobre el siguiente grafico para obtener las rutas mas cortas en cada dos nodos. El arco (3,5) es direccional, de manera que no esta permitido ningún trafico del nodo 5 al nodo 3. Todos los demás arcos permiten el trafico en ambas direcciones. 5
2
4
3
4
5 6 15
1 10 3
Ejemplo 2
20
Se generan las siguientes tablas
Matriz C
Matriz D
C
1
2
3
4
5
D
1
2
3
4
5
1
-
3
10
8
8
1
-
1
1
1
1
2
3
-
8
5
8
2
2
-
2
2
2
10
8
-
6
15
3
3
2
-
3
3
4
8
5
6
-
4
4
4
4
4
-
4
5
8
8
8
4
-
5
5
5
5
5
-
3
Ejemplo 2
21
Tomamos la primera fila y la primera columna
C
1
2
3
4
5
D
1
2
3
4
5
1
-
3
10
8
8
1
-
1
1
1
1
2
3
-
8
5
8
2
2
-
2
2
2
10
8
-
6
15
3
3
2
-
3
3
4
8
5
6
-
4
4
4
4
4
-
4
5
8
8
8
4
-
5
5
5
5
5
-
3
Ejemplo 2
22
K=1 En la base a la fila y columna de 1, tenemos que sumar los valores para dar con el valor mínimo. En Cij tenemos: C1,2 +C3,1=3+10=13=C2,3. En la tabla D, se cambia D2,3 por 1. C1,3 +C2,1=10+3=13=C3,2. En la tabla D, se cambia D3,2 por 1.
C
1
2
3
4
5
D
1
2
3
4
5
1
-
3
10
8
8
1
-
1
1
1
1
2
3
-
13
5
8
2
2
-
1
2
2
3
10
13 -
6
15
3
3
1
-
3
3
4
8
5
6
-
4
4
4
4
4
-
4
5
8
8
8
4
-
5
5
5
5
5
-
Ejemplo 2
23
Tomamos la segunda columna C
1
2
3
4
5
D
1
2
3
4
5
1
-
3
10
8
8
1
-
1
1
1
1
2
3
-
13
5
8
2
2
-
1
2
2
3
10
13
-
6
15
3
3
1
-
3
3
4
8
5
6
-
4
4
4
4
4
-
4
5
8
8
8
4
-
5
5
5
5
5
-
Ejemplo 2
24
K=2 Vemos que la relación esta en forma de cruz. Nos enfocaremos en las operaciones que si se pueden realizar. En Cij tenemos: C1,2 +C2,4=3+5=8=C1,4. En la tabla D, se cambia D1,4 por 2. C4,2 +C2,1=5+3=8=C4,1. En la tabla D, se cambia D4,1 por 2.
C
1
2
3
4
5
D
1
2
3
4
5
1
-
3
10
8
8
1
-
1
1
2
1
2
3
-
13
5
8
2
2
-
1
2
2
3
10
13
-
6
15
3
3
1
-
3
3
8 5
6
-
4
4
4
4
4
-
4
8
4
-
5
5
5
5
5
-
4 5
8
8
Ejemplo 2
25
Tomamos la tercera fila C
1
2
3
4
5
D
1
2
3
4
5
1
-
3
10
8
8
1
-
1
1
2
1
2
3
-
13
5
8
2
2
-
1
2
2
3
10
13
-
6
15
3
3
1
-
3
3
4
8
5
6
-
4
4
4
4
4
-
4
5
8
8
8
4
-
5
5
5
5
5
-
Ejemplo 2
26
K=3 Vemos que la relación esta en forma de cruz. Nos enfocaremos en las operaciones que si se pueden realizar. C1,3 +C3,5=10+15=25=C1,5. En la tabla D, se cambia D1,5 por 3. C2,4+C3,5=13+15=28=C2,5. En la tabla D, se cambia D2,5 por 3. C
1
2
3
4
5
D
1
2
3
4
5
1
-
3
10
8
25
1
-
1
1
2
3
2
3
-
13
5
28
2
2
-
1
2
3
3
10
13
-
6
15
3
3
1
-
3
3
4
8
5
6
-
4
4
4
4
4
-
4
5
8
8
8
4
-
5
5
5
5
5
-
Ejemplo 2
27
Tomamos la curta fila C
1
2
3
4
5
D
1
2
3
4
5
1
-
3
10
8
25
1
-
1
1
2
3
2
3
-
13
5
28
2
2
-
1
2
3
3
10
13
-
6
15
3
3
1
-
3
3
4
8
5
6
-
4
4
4
4
4
-
4
5
8
8
8
4
-
5
5
5
5
5
-
Ejemplo 2
28
K=4 Vemos que la relación esta en forma de cruz. Nos enfocaremos en las operaciones que si se pueden realizar. C1,4 +C4,5=8+4=12=C1,5. En la tabla D, se cambia D1,5 por 4. C2,4+C4,3=5+6=11=C2,3. En la tabla D, se cambia D2,3 por 4. C2,4+C4,5=5+4=9=C2,5. En la tabla D, se cambia D2,5 por 4. C3,4+C4,2=6+5=11=C3,2. En la tabla D, se cambia D3,2 por 4. C3,4+C4,4=6+4=10=C3,5. En la tabla D, se cambia D3,5 por 4. C4,1+C5,4=8+4=12=C5,1. En la tabla D, se cambia D5,1 por 2. C4,2+C5,4=5+4=9=C5,2. En la tabla D, se cambia D5,2 por 4. C4,3+C5,4=6+4=10=C5,3. En la tabla D, se cambia D5,3 por 4. C
1
2
3
4
5
D
1
2
3
4
5
1
-
3
10
8
12
1
-
1
1
2
4
2
3
-
11
5
9
2
2
-
4
2
4
3
10
11
-
6
10
3
3
4
-
3
4
4
8
5
6
-
4
4
4
4
4
-
4
5 12
9
10
4
5
2
4
4
5
Ejemplo 2
29
Tomamos la ultima fila Al hacer K=5 ya no cambiamos nada
C
1
2
3
4
5
D
1
2
3
4
5
1
-
3
10
8
12
1
-
1
1
2
4
2
3
-
11
5
9
2
2
-
4
2
4
3
10
11
-
6
10
3
3
4
-
3
4
4
8
5
6
-
4
4
4
4
4
-
4
5
12
9
10
4
-
5
2
4
4
5
-