Materia: #técnicas_y_diseños_de_algoritmos

Tags: Algoritmo, Grafos, Camino mínimo

Algoritmo de Floyd

Este algoritmo calcula el camino mínimo entre todo par de vértices de un digrafo pesado. Utiliza programación dinámica y se basa en la sigiente idea:

  1. Si D0=L y calculamos L1 como dij1=mín(dij0,di10+d1j0), donde dij1 es la longitud de un camino mínimo de vi a vj con vértices intermedio v1 o directo.

  2. Si calculamos Dk a partir de Dk1 como dijk=mín(dijk1,dikk1+dkjk1) donde dijk es la longitud de un camino mínimo de vi a vj cuyos vértices intermedios están en {vi,,vk}.

  3. D=Dn.

Damos por hecho que no existen circuitos de longitud negativa.

El pseudocodigo del algoritmo podria escribirse:

Floyd(G)
	D = L;
	for (k desde 1 a n) do:
		for (i desde 1 a n) do:
			for (j desde 1 a n) do:
				d[i][j] = mín(d[i][j], d[i][k] + d[k][j]);
			end for;
		end for;
	end for;
	return D;

Donde G=(V,X) es un digrafo de n vertices, y D es una matriz de distancias de G.

Este algoritmo tiene complejidad O(n3), bastante malo.