Estou tentando encontrar o conjunto independente máximo de um gráfico biparito.
Encontrei o seguinte em algumas notas "13 de maio de 1998 - Universidade de Washington - CSE 521 - Aplicações de fluxo de rede" :
Problema:
Dado um bipartido gráfico , encontrar um conjunto independente que é tão grande quanto possível, em que e . Um conjunto é independente se não houver arestas de entre os elementos do conjunto.
Solução:
Construa um gráfico de fluxo nos vértices . Para cada aresta há uma aresta de capacidade infinita de até . Para cada , existe uma margem de capacidade unitária de para , e para cada , existe uma margem de capacidade unitária de até .
Encontrar um corte capacidade finita , com e . Deixe que e . O conjunto é independente, pois não há arestas de capacidade infinita cruzando o corte. O tamanho do corte é . Isso, para tornar o conjunto independente o maior possível, tornamos o corte o menor possível.
Então, vamos considerar isso como o gráfico:
A - B - C
|
D - E - F
Podemos dividir isso em um gráfico bipartido da seguinte forma
Podemos ver pela busca por força bruta que o único máximo conjunto independente é . Vamos tentar trabalhar com a solução acima:
Portanto, a matriz de adjacência da rede de fluxo construída seria:
Aqui é onde estou preso, o menor corte de capacidade finita que vejo é trivial: com capacidade de 3)
O uso desse corte leva a uma solução incorreta de:
Enquanto esperávamos ? Alguém pode identificar onde eu errei no meu raciocínio / trabalho?
fonte
Respostas:
O complemento de um conjunto independente máximo é uma cobertura mínima de vértice.
Para encontrar uma cobertura mínima de vértices em um gráfico bipartido, consulte o teorema de König .
fonte
A solução fornecida está claramente incorreta, como você demonstra no contra-exemplo. Observe que o gráfico U + V é um componente conectado pelas arestas de capacidade infinita. Portanto, todo corte válido deverá conter todos os A, B, C, D, E, F do mesmo lado.
Tentando rastrear de onde veio a solução: http://www.cs.washington.edu/education/courses/cse521/01sp/flownotes.pdf cita Network Flows, de Ahuja, Magnanti e Orlin, para alguns dos problemas. Este livro não possui direitos autorais e pode ser baixado em http://archive.org/details/networkflows00ahuj, mas parece não conter esse problema e solução (procure todas as ocorrências de "bipartido").
Observe que o parágrafo de explicação da solução não mostra que o menor corte do gráfico que ele constrói corresponde ao conjunto independente máximo . Apenas mostra uma maneira de obter um conjunto independente.
E, no entanto, você pode ver o que o algoritmo está tentando fazer. Aqui está o que o conjunto independente máximo real corresponde em termos de seu corte s, t:
A borda de capacidade infinita que quebra o algoritmo é enfatizada.
Não sei como consertar o algoritmo para o que foi planejado. Talvez o custo de uma aresta infinita deva ser zero se retroceder (ou seja, para onde vai de S para T, mas passa do lado t para o lado s)? Mas ainda é fácil encontrar o min-cut / max-flow com essa não linearidade? Além disso, pensando em uma maneira de fazer a ponte entre a solução de @Jukka Suomela e o algoritmo da pergunta, há uma dificuldade em irmos da correspondência máxima para a cobertura mínima de vértices: encontrar a correspondência máxima pode ser feito por um fluxo máximo como o algoritmo, como você recupera a cobertura mínima de vértice usando um algoritmo semelhante ao fluxo? Conforme descrito aqui, depois que a correspondência máxima for encontrada, as arestas entre U e V serão direcionadas para encontrar a cobertura mínima de vértice. Portanto, novamente, isso não mostra que basta uma aplicação simples de min-cut / max-flow para resolver esse problema.
fonte
fonte
O corte deve estar no fluxo real, não nas capacidades. Como o fluxo de s é finito, qualquer corte {S, T} será finito. O resto é explicado acima.
fonte
fonte