Aprendizaje Interactivo de Teoría de Grafos
Aprendizaje Interactivo de Teoría de Grafos
Guest User
Using app without sign in
Calculadora de flujo máximo
Calcula el caudal máximo que puede circular del origen al sumidero
Selecciona un algoritmo y genera pasos para comenzar la visualización
El problema del flujo máximo pregunta cuánto material puede enviarse desde una fuente a un sumidero por una red donde cada arista tiene una capacidad. Es uno de los modelos más versátiles de la optimización combinatoria, y por el teorema flujo máximo-corte mínimo su valor iguala la capacidad del menor corte que separa fuente de sumidero.
El método de Ford-Fulkerson halla repetidamente un camino de aumento de la fuente al sumidero en el grafo residual, una estructura contable que registra la capacidad restante y permite deshacer flujo. Enviar flujo por caminos de aumento hasta que no quede ninguno produce un flujo máximo. El refinamiento de Edmonds-Karp aumenta siempre por un camino más corto hallado con BFS, garantizando O(V E al cuadrado); el algoritmo de Dinic lo mejora con grafos de niveles y flujos bloqueantes.
El flujo máximo modela el caudal de tuberías y tráfico, el emparejamiento bipartito para asignación de tareas, la programación de tripulaciones aéreas, la segmentación de imágenes en visión por computador, la eliminación en béisbol y la selección de proyectos. Es el tema avanzado estándar de grafos en programación competitiva y entrevistas senior.
Todos los algoritmos de flujo máximo de esta familia son el mismo bucle: encuentra un camino del origen al sumidero con capacidad libre, empuja todo lo que permita y repite. Solo se diferencian en cómo eligen ese camino.
FlujoMáximo(grafo, s, t):
flujo = 0
construir grafo residual: cap(u,v) directa, 0 inversa
mientras exista un camino aumentante P de s a t
en el grafo residual:
cuello = mínima capacidad residual en P
para cada arista (u, v) de P:
residual[u][v] -= cuello
residual[v][u] += cuello // arista de deshacer
flujo += cuello
devolver flujo
// Ford-Fulkerson: halla P con DFS (cualquier camino)
// Edmonds-Karp: halla P con BFS (camino más corto)La arista residual inversa es la parte que parece equivocada y en realidad es esencial. Permite que un camino aumentante posterior cancele flujo empujado antes, y así el algoritmo escapa de una mala elección temprana sin retroceder. Sin esas aristas de deshacer, el bucle voraz se queda atascado en un flujo subóptimo.
Ejecuta Edmonds-Karp sobre el ejemplo clásico en el que una primera elección voraz debe deshacerse después.
Grafo de ejemplo: Capacidades dirigidas: S a A (10), S a B (10), A a B (2), A a T (4), B a T (9).
El flujo máximo es 13, y el corte mínimo es el par de aristas A-T y B-T con capacidad total 13. Que ambos números coincidan no es casualidad: es el teorema de flujo máximo y corte mínimo.
Tiempo: O(V·E^2) con Edmonds-Karp · Espacio: O(V + E)
Ford-Fulkerson con elección arbitraria de camino corre en O(E por el flujo máximo), porque cada aumento añade al menos una unidad pero la búsqueda del camino cuesta O(E). Eso es pseudopolinómico y realmente malo: con capacidades de mil millones puede requerir mil millones de aumentos, y con capacidades irracionales puede no terminar. Edmonds-Karp lo arregla eligiendo siempre el camino aumentante más corto mediante BFS. La distancia mínima del origen al sumidero nunca decrece, y cada arista puede ser el cuello de botella como mucho V/2 veces, lo que acota los aumentos en O(VE) y el total en O(V por E al cuadrado). Dinic agrupa los aumentos en fases usando un grafo por niveles y lo mejora a O(V al cuadrado por E), u O(E por raíz de V) en grafos de capacidad unitaria.
La elección depende sobre todo de la magnitud de las capacidades y del tamaño del grafo.
| Alternativa | Prefiérela cuando | Coste |
|---|---|---|
| Edmonds-Karp | La opción por defecto. La elección de camino por BFS hace que la cota no dependa de los valores de capacidad. | O(V·E^2) |
| Dinic | Grafos más grandes. Los grafos por niveles y los flujos bloqueantes lo hacen bastante más rápido en la práctica. | O(V^2·E) |
| Push-relabel | Grafos muy grandes y densos donde importa el mejor comportamiento asintótico. | O(V^3) |
| Hopcroft-Karp | El problema es en realidad emparejamiento bipartito, un caso particular de flujo máximo con capacidad unitaria. | O(E·sqrt(V)) |
| Corte mínimo | Quieres las aristas cuello de botella en lugar del caudal. El mismo cálculo, leído de otra manera. | igual que flujo máximo |
Leer el artículo completo: Network Flow: Max-Flow and Min-Cut
Algoritmos relacionados: Corte Mínimo, Comprobación de Grafo Bipartito, Búsqueda en Anchura