Está en la página 1de 20

INTEGRANTES:

JOHN RICHARD MAQUERA DELGADO

26 de Mayo del 2011

Definicin : El algoritmo de Floyd - Warshall ,

ideado por Floyd en 1962 basndose en un teorema de Warshall tambin de 1962, usa la metodologa de Programacin Dinmica para resolver el problema. El problema que intenta resolver este algoritmo es el de encontrar el camino ms corto entre todos los pares de nodos o vrtices de un grafo. Esto es semejante a construir una matriz con todas las distancias mnimas entre pares de vrtices de un grafo, indicando adems la ruta a seguir para ir del primer vrtice al segundo. Este es uno de los problemas ms interesantes que se pueden resolver con algoritmos de grafos.

Pseudocodigo del Algorimto


Floyd_Warshall(n,W) Var D:arreglo [1..n][1..n] de enteros Inicio Para i = 1 hasta n hacer Para j = 1 hasta n hacer Inicio D [i,j] w [i,j] pred [i,j] nulo fin fin para k=1 hasta n hacer para j=1 hasta n hacer inicio si D[i,k] +D[k,j] < D[i,j] entonces inicio D [I,j] D[i,k]+ D[k,j] pred[I,j] k fin fin return D fin

Implementacin del Algoritmo


public class Floyd { public static final int INF = Integer.MAX_VALUE/2; public static int[][] algoritmoFloyd(int[][]D) { int n=D.length; //n de vrtices del grafo for(int k=0;k<n;k++) for(int i=0;i<n;i++) for(int j=0;j<n;j++) D[i][j]= D[i][j] < D[i][k] + D[k][j] ? D[i][j] : D[i][k] + D[k][j]; return D; } }

Complejidad = O(n3)

Encontrar el camino ms corto entre todos los pares de nodos del siguiente grafo.

1)

Hallamos la Matriz de Distancias del grafo :

2)Inicializamos la matriz de predecesores :

3) Primera Iteracin : k=0; i=2; j=1;

D(2,1)<D(2,0)+D(0,1)?

<30+5?

D(2,1)=35

4)Segunda Iteracin : k=0; i=3; j=1

D(3,1)<D(3,0)+D(0,1)?

<15+5? D(3,1)=20

5) Tercera Iteracin : k=1; i=0; j=2 D(0,2)<D(0,1)+D(1,2)? <15+5? D(0,2)=20

6)Cuarta Iteracin : k=1; i=0; j=3

D(0,3)<D(0,1)+D(1,3)?

<5+5? D(0,3)=10

7) Quinta Iteracin : k=2; i=1; j=0

D(1,0)<D(1,2)+D(2,0)? (1,0)=45

50<15+30?D

8)Sexta Iteracin : k=3; i=0; j=2

D(0,2)<D(0,3)+D(3,2)? D(0,2)=15

20<10+5?

9)Stima Iteracin : k=3; i=1; j=0

D(1,0)<D(1,3)+D(3,0)? D(1,0)=20

45<5+15?

10)Octava Iteracin : k=3; i=1; j=2

D(1,2)<D(1,3)+D(3,2)?

15 <5+5? D(1,2)=10

Las Matrices Resultantes que contiene las distancia mnimas y la ruta a seguir entre un par de nodos son :

` ` ` `

Este algoritmo se puede aplicar a multitud de problemas tales como : En el diseo de circuitos En el diseo de rutas de transporte Aproximaciones al problema del viajante Como base de otros algoritmos ms complejos

Este algoritmo obtiene la mejor ruta entre todo par de nodos . La iteracin se produce sobre nodos intermedios , es decir prueba si lo mejor para ir de un nodo a otro es a travs de un nodo intermedio elegido o no.

Un aspecto importante, es la construccin de la matriz ,por lo tanto se tiene que tener cuidado al construir la matriz de Distancias y Predecesores.