Sabemos que calcular un flujo máximo resp. un corte mínimo de una red con capacidades es equivalente; cf. el teorema de corte mínimo y flujo máximo .
Tenemos algoritmos (más o menos eficientes) para calcular los flujos máximos, y calcular un corte mínimo dado un flujo máximo tampoco es difícil ni costoso.
¿Pero qué pasa con el reverso? Dado un corte mínimo, ¿cómo podemos determinar un flujo máximo? Sin resolver Max-Flow desde cero, por supuesto, y preferiblemente más rápido que eso también.
Algunos pensamientos:
Desde el corte mínimo, sabemos el valor de flujo máximo. No veo cómo esta información ayuda a los enfoques estándar de ruta de aumento y re-etiquetado, aunque la adaptación de este último parece un poco más plausible.
No podemos usar el corte mínimo para dividir la red en dos partes y recurrir ya que eso no reducirá el problema en el peor de los casos (si una partición es un singleton); Tampoco tendríamos un corte mínimo de las instancias más pequeñas.
¿Conocer el valor del flujo máximo acelera la resolución del Max-Flow LP, tal vez a través de las condiciones de holgura complementarias?
fuente
Respuestas:
En el peor de los casos, el corte mínimo en sí mismo no transmite mucha información sobre el flujo máximo. Considere una gráfica en la cual el mínimo s , t -cut tiene valor w . Si extiendo G agregando un nuevo vértice s ′ y un borde ( s ′ , s ) con peso w , un mínimo s ′ , t -cut en el nuevo gráfico consiste solo en el borde ( s ′ , s )G=(V,E) s,t w G s′ (s′,s) w s′,t (s′,s) pero eso no proporciona ninguna información sobre cómo obtener unidades de flujo de s a t .w s t
Efectivamente, el corte mínimo le indica el valor del flujo, pero no cómo lograrlo. Esto significa que conocer el corte mínimo puede acelerar la búsqueda del flujo como máximo por un factor logarítmico, ya que podríamos hacer una búsqueda binaria para encontrar el valor del corte.
fuente
Ciertamente existen algoritmos que le permiten calcular el corte mínimo antes de calcular el flujo máximo. Dos de estos algoritmos son los algoritmos de relé de empuje y pseudoflow que están estrechamente relacionados. Este último es más eficiente. Ambos algoritmos usan propiedades especiales del gráfico residual que mejoran iterativamente para derivar el flujo máximo del corte mínimo. Para más detalles, recomiendo leer el código y los documentos.
Para profundizar en el caso de la etiqueta de empuje, cuando el algoritmo no puede empujar más flujo hacia el sumidero, se garantiza que ha calculado un corte mínimo. Esta parte del algoritmo se llama fase 1 por falta de un nombre mejor. La Fase 2 es la etapa más eficiente donde transforma el corte mínimo en un flujo máximo al cancelar iterativamente los ciclos en el gráfico residual usando una primera búsqueda de profundidad única y empujando el exceso de regreso a la fuente. Creo que se puede demostrar que la fase 2 es asintomáticamente más eficiente que la fase 1.
fuente