Materia: #técnicas_y_diseños_de_algoritmos
Tags: Algoritmo, Flujo en redes, Dígrafos
Algoritmo de Ford-Fulkerson
Cuando trabajamos con redes existe un problema habitual: encontrar el flujo máximo. Consiste en maximizar el valor de un flujo
El algoritmo de Ford-Fulkerson nos ayuda a resolver este problema, unicamente utilizando la red en cuestión. Mas que un algoritmo es como un metodo goloso, ya que nos deja muchas libertades a la hora de cumplir ciertos pasos. Como tal, la idea es la siguiente:
-
Encontrar un camino de
a por el que pueda correr flujo, es decir, un camino de aumento -
Llenar de flujo lo mas que podamos dicho camino
-
Armar la red residual de la red que nos quedo con el flujo factible
-
Buscar un nuevo camino de aumento, y repetir
-
Si no hay camino de aumento, quiere decir que logramos maximizar
Si lo piensan, llamarlo algoritmo es bastante generoso. Por ejemplo, el paso 1 indica encontrar un camino de
El pseudocodigo del algoritmo podria escribirse como sigue:
FordFulkerson(N):
definir un flujo inicial en N // Por ejemplo, f(e) = 0 para todo e
while (exista P camino de aumento en R(N, f)) do:
for (cada arco (v -> w) de P) do:
if ((v -> w) pertenece a X) do:
f((v -> w)) = f((v -> w)) + dist(P)
else:
f((w -> v)) = f((w -> v)) - dist(P)
end if;
end for;
end while;
A su vez, la complejidad final del algoritmo, si construimos la red residual de manera lineal (es decir, en
La logica del calculo de esta complejidad radica en que, en el peor de los casos, cada vez que calculamos el flujo de un posible camino, aumentamos a