El algoritmo de Ford-Fulkerson resuelve el problema de encontrar el flujo máximo en una red de transporte .
La idea del algoritmo es la siguiente. El valor de flujo se establece inicialmente en 0: para todos . Luego, la cantidad de flujo se incrementa iterativamente buscando una ruta de aumento (una ruta desde la fuente hasta el sumidero a lo largo de la cual se puede enviar más flujo). El proceso se repite hasta que se puede encontrar una ruta de aumento.
Es importante que el algoritmo no especifique exactamente qué camino estamos buscando en el paso 2 ni cómo lo hacemos. Por esta razón, se garantiza que el algoritmo convergerá solo para anchos de banda enteros, pero incluso para ellos, para anchos de banda grandes, puede ejecutarse durante mucho tiempo. Si las capacidades son reales, el algoritmo puede ejecutarse indefinidamente sin converger a la solución óptima (ver ejemplo a continuación ).
Si no buscas ningún camino, sino el más corto, obtienes el algoritmo de Edmonds-Karp o el algoritmo de Dinits . Estos algoritmos convergen para cualquier peso real en el tiempo y respectivamente.
Dado un gráfico con capacidad y flujo para aristas de a . Es necesario encontrar el caudal máximo desde la fuente hasta el sumidero . En cada paso del algoritmo, se aplican las mismas condiciones que para todos los flujos:
La red residual es una red con ancho de banda y sin flujo.
Entrada Gráfico con ancho de banda , fuente y sumidero Salida Caudal máximo de a
La ruta se puede encontrar, por ejemplo, mediante la búsqueda en anchura ( algoritmo de Edmonds-Karp ) o la búsqueda en profundidad en .
En cada paso, el algoritmo agrega un flujo de ruta de aumento al flujo existente. Si las capacidades de todos los bordes son números enteros, es fácil demostrar por inducción que los flujos a través de todos los bordes siempre serán números enteros. Por lo tanto, en cada paso, el algoritmo aumenta el flujo en al menos uno, por lo que convergerá en la mayoría de los pasos, donde f es el flujo máximo en el gráfico. Es posible completar cada paso en el tiempo , donde está el número de aristas en el gráfico, entonces el tiempo total de ejecución del algoritmo es limitado .
Si la capacidad de al menos uno de los bordes es un número irracional, entonces el algoritmo puede ejecutarse indefinidamente, sin converger necesariamente a la solución correcta. A continuación se proporciona un ejemplo.
Considere la red que se muestra a la derecha, con fuente , sumidero , capacidades de borde y la capacidad de todos los demás bordes igual a un número entero . La constante se elige de modo que . Usamos los caminos del gráfico residual dado en la tabla, y , y .
Paso | camino encontrado | Hilo añadido | Capacidades residuales | ||
---|---|---|---|---|---|
0 | |||||
una | |||||
2 | |||||
3 | |||||
cuatro | |||||
5 |
Tenga en cuenta que después del paso 1, así como después del paso 5, las capacidades residuales de los bordes , y tienen la forma , y , respectivamente, para algunos naturales . Esto significa que podemos usar rutas de aumento , , e infinitas veces, y la capacidad residual de estos bordes siempre será de la misma forma. El flujo total después del paso 5 es . En un tiempo infinito, el flujo total convergerá a , mientras que el flujo máximo es . Por lo tanto, el algoritmo no solo se ejecuta indefinidamente, sino que ni siquiera converge a la solución óptima. [una]
El siguiente ejemplo muestra los primeros pasos del algoritmo Ford-Fulkerson en una red de transporte con cuatro nodos, fuente A y sumidero D. Este ejemplo muestra el peor de los casos. Cuando se usa la búsqueda primero en amplitud, el algoritmo solo necesita 2 pasos.
Sendero | Banda ancha | Resultado |
---|---|---|
Red de transporte inicial | ||
Después de 1998 pasos... | ||
Red de destino |