Sabemos que calcular um fluxo máximo resp. um corte mínimo de uma rede com capacidades é equivalente; cf. o teorema de corte mínimo de fluxo máximo .
Temos algoritmos (mais ou menos eficientes) para calcular fluxos máximos, e calcular um corte mínimo dado um fluxo máximo também não é difícil nem caro.
Mas e o inverso? Dado um corte mínimo, como podemos determinar um fluxo máximo? Sem resolver o Max-Flow do zero, é claro, e de preferência mais rápido que isso também.
Alguns pensamentos:
Desde o corte mínimo, sabemos o valor máximo do fluxo. Não vejo como essas informações ajudam o padrão a abordar o caminho de aumento e a re-atribuição de push, embora a adaptação do último pareça um pouco mais plausível.
Não podemos usar o corte mínimo para dividir a rede em duas partes e recuperar, pois isso não reduzirá o problema no pior dos casos (se uma partição for um singleton); também não teríamos um corte mínimo das instâncias menores.
O conhecimento do valor do fluxo máximo acelera a solução do Max-Flow LP, talvez por meio de condições complementares de folga?
fonte
Respostas:
Na pior das hipóteses, o corte mínimo em si não transmite muita informação sobre o fluxo máximo. Considere um gráfico no qual o mínimo s , t- cut tem o valor w . Se eu estender G adicionando um novo vértice s ' e uma aresta ( s ' , s ) com peso w , um mínimo de s ' , o corte t no novo gráfico consiste apenas na aresta ( s ' , s )G = ( V,E) s,t w G s′ (s′, S ) W s′, t ( s′, S ) mas isso não fornece nenhuma informação sobre como obter unidades de fluxo de s para t .W s t
Efetivamente, o corte mínimo informa o valor do fluxo, mas não como atingi-lo. Isso significa que conhecer o corte mínimo pode acelerar a localização do fluxo, no máximo, por um fator logarítmico, uma vez que poderíamos fazer uma busca binária para encontrar o valor do corte.
fonte
Certamente existem algoritmos que permitem calcular o corte mínimo antes de calcular o maxflow. Dois desses algoritmos são os algoritmos push relabel e pseudoflow, que estão intimamente relacionados. O último é mais eficiente. Ambos os algoritmos usam propriedades especiais do gráfico residual que iterativamente melhoram para derivar o fluxo máximo do corte mínimo. Para detalhes, eu recomendo a leitura do código e dos documentos.
Para elaborar o caso push relabel, quando o algoritmo não pode enviar mais fluxo para o coletor, é garantido que ele tenha calculado um corte mínimo. Essa parte do algoritmo é chamada de fase 1 por falta de um nome melhor. A Fase 2 é o estágio mais eficiente em que transforma o corte mínimo em um fluxo máximo, cancelando iterativamente os ciclos no gráfico residual usando uma primeira pesquisa de profundidade única e empurrando o excesso de volta para a fonte. Acredito que a fase 2 pode ser comprovadamente mais eficiente do que a fase 1.
fonte