Graças ao teorema min-cut de fluxo máximo, sabemos que podemos usar qualquer algoritmo para calcular um fluxo máximo em um gráfico de rede para calcular um -min-cut. Portanto, a complexidade de calcular um corte mínimo ( s , t ) não é mais do que a complexidade de calcular um fluxo máximo ( s , t ) .
Poderia ser menos? Poderia haver um algoritmo para calcular um corte mínimo mais rápido do que qualquer algoritmo de fluxo máximo?
Tentei encontrar uma redução para reduzir o problema de ) -max-flow para o problema de ( s , t ) -min-cut, mas não consegui encontrar um. Meu primeiro pensamento foi usar um algoritmo de dividir e conquistar: primeiro encontre um min-cut, que separa o gráfico em duas partes; Agora encontre recursivamente um fluxo máximo para a parte esquerda e um fluxo máximo para a parte direita e combine-os com todas as arestas que cruzam o corte. Isso realmente funcionaria para produzir um fluxo máximo, mas seu pior caso de execução pode ser até O ( | V | ) vezes maior que o tempo de execução do algoritmo min-cut. Existe uma redução melhor?
Percebo que o teorema do corte mínimo de fluxo máximo mostra que a complexidade de calcular o valor de um fluxo máximo é a mesma que a complexidade de calcular a capacidade de um corte mínimo, mas não é disso que estou perguntando. Estou perguntando sobre o problema de encontrar um fluxo máximo e um min-cut (explicitamente).
Isso está intimamente relacionado ao cálculo de um fluxo máximo a partir de um corte mínimo , exceto: (1) estou disposto a permitir reduções de Cook (reduções de Turing), não apenas reduções de Karp (reduções de uma a uma) e (2) talvez, dado , possamos encontrar algum gráfico modo que o min-cut de facilite a computação do fluxo máximo de , que é algo que está fora do escopo dessa outra questão.G ′ G
Respostas:
Aqui está uma abordagem possível:
Suponha que você conheça o corte S e, em seguida, encontrar o fluxo de para t é um problema de fluxo de rede de custo mínimo com custo zero, pois você sabe exatamente o fluxo de saída em cada vértice em V ∖ S e a entrada em t . Suponha que f denota um fluxo S - t e A a matriz arco-nó (ou seja, a linha i , col j tem 1 se i é a cauda de j , -1 se é a cabeça, zero caso contrário), e seja b que A f = b se fS t V∖S t f S−t A i j i j b Af=b f satisfaz a oferta / demanda e a conservação do fluxo. Então, com a eliminação gaussiana, podemos encontrar uma solução viável em operações.|V|3
Para encontrar um corte de um fluxo, precisamos construir o gráfico residual que leva no máximo tempo e, potencialmente, atravessar|E| vértices. |V|
Portanto, para gráficos completos e o corte mínimo sendo apenas a fonte ou apenas o coletor, a redução leva tempo igual nas duas direções, no pior caso. No entanto, eu acho que encontrar uma solução viável para pode ser feito mais rapidamente do que | V | 3 dada a estrutura especial. Não tenho certeza de como provar isso.Af=b |V|3
fonte