método de Ford-Fulkerson o algoritmo de Ford-Fulkerson ( FFA ) es un algoritmo codicioso que calcula el flujo máximo en una red de flujo . A veces se le llama "método" en lugar de "algoritmo", ya que el enfoque para encontrar rutas de aumento en un gráfico residual no se especifica completamente [1] o se especifica en varias implementaciones con diferentes tiempos de ejecución. [2] Fue publicado en 1956 por LR Ford, Jr. y DR Fulkerson . [3] El nombre "Ford – Fulkerson" también se usa a menudo para el algoritmo de Edmonds-Karp, que es una implementación completamente definida del método Ford-Fulkerson.
La idea detrás del algoritmo es la siguiente: siempre que haya una ruta desde la fuente (nodo de inicio) al sumidero (nodo final), con capacidad disponible en todos los bordes de la ruta, enviamos flujo a lo largo de una de las rutas. Luego encontramos otro camino, y así sucesivamente. Una ruta con capacidad disponible se llama ruta de aumento .
Algoritmo [ editar ]
Dejar ser un gráfico, y para cada borde de u a v , vamos ser la capacidad y ser el flujo Queremos encontrar el flujo máximo de la fuente s al sumidero t . Después de cada paso en el algoritmo se mantiene lo siguiente:
Limitaciones de capacidad El flujo a lo largo de un borde no puede exceder su capacidad. Simetría sesgada El flujo neto de u a v debe ser opuesto al flujo neto de v a u (ver ejemplo). Conservación de flujo El flujo neto a un nodo es cero, excepto por la fuente, que "produce" flujo, y el sumidero, que "consume" flujo. Valor (f) El flujo que sale de s debe ser igual al flujo que llega a t .
Esto significa que el flujo a través de la red es un flujo legal después de cada ronda en el algoritmo. Definimos la red residual. Ser la red con capacidad. y no hay flujo. Observe que puede suceder que se permita un flujo de v a u en la red residual, aunque no está permitido en la red original: si y entonces .
- Entradas dadas una redcon capacidad de flujo c , un nodo fuente s y un nodo sumidero t
- Salida Calcular un flujo f de s a t de valor máximo
- para todos los bordes
- Mientras que hay un camino p de s a t en, tal que para todos los bordes :
- Encontrar
- Para cada borde
- ( Enviar flujo a lo largo del camino )
- ( El flujo puede ser "devuelto" más tarde )
- "←" denota la asignación . Por ejemplo, " artículo ← más grande " significa que el valor de los cambios más grandes en el valor del artículo .
- " return " termina el algoritmo y genera el siguiente valor.
La ruta en el paso 2 se puede encontrar, por ejemplo, con una búsqueda en primer lugar (BFS) o una búsquedaen profundidad en. Si usa el primero, el algoritmo se llama Edmonds – Karp .
Cuando no se puedan encontrar más rutas en el paso 2, s no podrá alcanzar t en la red residual. Si S es el conjunto de nodos alcanzables por s en la red residual, entonces la capacidad total en la red original de bordes desde S hasta el resto de V es, por una parte, igual al flujo total que encontramos desde s hasta t , y por otro lado, sirve como un límite superior para todos estos flujos. Esto prueba que el flujo que encontramos es máximo. Véase también el teorema de corte mínimo de flujo máximo .
Si la grafica tiene múltiples fuentes y sumideros, actuamos de la siguiente manera: Supongamos que y . Añadir una nueva fuente con un borde desde a cada nodo con capacidad . Y añada un nuevo fregadero. con un borde de cada nodo a con capacidad . Luego aplique el algoritmo Ford-Fulkerson.
Además, si un nodo u tiene restricción de capacidad, reemplazamos este nodo con dos nodos , y una ventaja con capacidad . Luego aplique el algoritmo Ford-Fulkerson.
Complejidad [ editar ]
Al agregar la ruta de aumento de flujo al flujo ya establecido en el gráfico, se alcanzará el flujo máximo cuando ya no se puedan encontrar más rutas de aumento de flujo en el gráfico. Sin embargo, no hay certeza de que esta situación sea alcanzada, por lo que lo mejor que se puede garantizar es que la respuesta será correcta si el algoritmo termina. En el caso de que el algoritmo se ejecute para siempre, el flujo podría incluso no converger hacia el flujo máximo. Sin embargo, esta situación solo ocurre con valores de flujo irracional. Cuando las capacidades son enteros, el tiempo de ejecución de Ford – Fulkerson está limitado por(ver gran notación O ), donde es el número de aristas en el gráfico y Es el flujo máximo en el gráfico. Esto se debe a que cada ruta de aumento se puede encontrar en tiempo y aumenta el flujo en una cantidad entera de al menos , con el límite superior .
Una variación del algoritmo Ford-Fulkerson con terminación garantizada y un tiempo de ejecución independiente del valor de flujo máximo es el algoritmo Edmonds-Karp , que se ejecuta en hora.
Ejemplo integral [ editar ]
El siguiente ejemplo muestra los primeros pasos de Ford – Fulkerson en una red de flujo con 4 nodos, fuente y hundirse . Este ejemplo muestra el peor comportamiento del algoritmo. En cada paso, solo un flujo deSe envía a través de la red. Si en su lugar se utilizara la primera búsqueda de amplitud, solo se necesitarían dos pasos.
Camino | Capacidad | Red de flujo resultante |
---|---|---|
Red de flujo inicial | ||
Después de 1998 más pasos ... | ||
Red de flujo final |
Observe cómo el flujo es "rechazado" desde a al encontrar el camino .
Ejemplo sin terminación [ editar ]
Considere la red de flujo que se muestra a la derecha, con la fuente , lavabo , capacidades de bordes , y respectivamente , y y la capacidad de todos los demás bordes algún número entero . El constante fue elegido para que . Usamos rutas de aumento de acuerdo con la siguiente tabla, donde, y .
Paso | Camino de aumento | Flujo enviado | Capacidades residuales | ||
---|---|---|---|---|---|
0 | |||||
1 | |||||
2 | |||||
3 | |||||
4 | |||||
5 |
Tenga en cuenta que después del paso 1, así como después del paso 5, las capacidades residuales de los bordes , y están en la forma , y , respectivamente, para algunos . Esto significa que podemos utilizar rutas de aumento., , y Infinidad de veces y las capacidades residuales de estos bordes siempre estarán en la misma forma. El flujo total en la red después del paso 5 es. Si continuamos utilizando rutas de aumento como las anteriores, el flujo total converge a, mientras que el flujo máximo es . En este caso, el algoritmo nunca termina y el flujo ni siquiera converge al flujo máximo. [4]
No hay comentarios:
Publicar un comentario