Gracias al teorema de corte mínimo de flujo máximo, sabemos que podemos usar cualquier algoritmo para calcular un flujo máximo en un gráfico de red para calcular un corte -min. Por lo tanto, la complejidad de calcular un corte mínimo ( s , t ) no es más que la complejidad de calcular un flujo máximo ( s , t ) .
¿Podría ser menos? ¿Podría haber un algoritmo para calcular un corte mínimo que sea más rápido que cualquier algoritmo de flujo máximo?
Traté de encontrar una reducción para reducir el problema ) -max-flow al problema ( s , t ) -min-cut, pero no pude encontrar una. Lo primero que pensé fue usar un algoritmo de divide y vencerás: primero busca un corte mínimo, que separa el gráfico en dos partes; ahora encuentre recursivamente un flujo máximo para la parte izquierda y un flujo máximo para la parte derecha, y combínelos con todos los bordes que cruzan el corte. De hecho, esto funcionaría para producir un flujo máximo, pero su peor tiempo de ejecución podría ser tanto como O ( | V | ) veces mayor que el tiempo de ejecución del algoritmo de corte mínimo. ¿Hay una mejor reducción?
Me doy cuenta de que el teorema de corte mínimo de flujo máximo muestra que la complejidad de calcular el valor de un flujo máximo es la misma que la complejidad de calcular la capacidad de un corte mínimo, pero eso no es lo que estoy preguntando. Estoy preguntando sobre el problema de encontrar un flujo máximo y encontrar un corte mínimo (explícitamente).
Esto está muy relacionado con Calcular un flujo máximo a partir de un corte mínimo , excepto: (1) Estoy dispuesto a permitir reducciones de Cook (reducciones de Turing), no solo reducciones de Karp (reducciones de muchos) y (2) quizás dado podemos encontrar algún gráfico G ' tal que el corte mínimo de G ' facilite el cálculo del flujo máximo de G , que es algo que está fuera del alcance de esa otra pregunta.
Respuestas:
Aquí hay un posible enfoque:
Suponga que conoce el corte S, luego encontrar el flujo de a t es un problema de flujo de red de costo mínimo con costo cero, ya que conoce exactamente el flujo de salida en cada vértice en V ∖ S y en el flujo de entrada en t . Suponga que f denota un flujo S - t y A la matriz de arco de nodo (es decir, la fila i , col j tiene 1 si i es la cola de j , -1 si es la cabeza, de lo contrario cero), y deje que bS t V∖S t f S−t A i j i j b tal que si fAf=b f Satisface la oferta / demanda y la conservación del flujo. Luego, con la eliminación gaussiana, podemos encontrar una solución factible en operaciones.|V|3
Para encontrar un corte de un flujo necesitamos construir el gráfico residual que toma como máximo tiempo, y luego potencialmente atravesar | V | vértices|E| |V|
Entonces, para gráficos completos y el corte mínimo es solo la fuente o solo el sumidero, la reducción toma el mismo tiempo en ambas direcciones en el peor de los casos. Sin embargo, creo que encontrar una solución factible para se puede hacer más rápido que | V | 3 dada la estructura especial. Sin embargo, no estoy seguro de cómo probar eso.Af=b |V|3
fuente