Estoy tratando de encontrar el conjunto máximo independiente de un gráfico de biparita.
Encontré lo siguiente en algunas notas "13 de mayo de 1998 - Universidad de Washington - CSE 521 - Aplicaciones del flujo de red" :
Problema:
Dado un bipartito gráfico , encontrar un conjunto independiente que es lo más grande posible, donde y . Un conjunto es independiente si no hay bordes de entre los elementos del conjunto.
Solución:
Construya un gráfico de flujo en los vértices . Para cada borde hay un borde de capacidad infinita de a . Para cada , hay un borde de capacidad de unidad de a , y para cada , hay un borde de capacidad de unidad de a .
Encontrar un corte capacidad finita , con y . Let y . El conjunto es independiente ya que no hay bordes de capacidad infinita que crucen el corte. El tamaño del corte es . Esto, para que el conjunto independiente sea lo más grande posible, hacemos que el corte sea lo más pequeño posible.
Entonces tomemos esto como el gráfico:
A - B - C
|
D - E - F
Podemos dividir esto en un gráfico bipartito de la siguiente manera
Podemos ver por la búsqueda de fuerza bruta que la única máximo conjunto independiente es . Probemos y analicemos la solución anterior:
Entonces la matriz de adyacencia de la red de flujo construida sería:
Aquí es donde estoy atrapado, el corte de capacidad finita más pequeño que veo es trivial: con una capacidad de 3)
El uso de este corte conduce a una solución incorrecta de:
Mientras que esperábamos ? ¿Alguien puede detectar dónde me he equivocado en mi razonamiento / trabajo?
fuente
Respuestas:
El complemento de un conjunto independiente máximo es una cubierta mínima de vértice.
Para encontrar una cobertura mínima de vértice en un gráfico bipartito, vea el teorema de König .
fuente
La solución dada es claramente incorrecta, como lo demuestra con el contraejemplo. Tenga en cuenta que el gráfico U + V es un componente conectado por los bordes de capacidad infinita. Por lo tanto, cada corte válido tendrá que contener todos A, B, C, D, E, F en el mismo lado.
Intentando rastrear de dónde vino la solución: http://www.cs.washington.edu/education/courses/cse521/01sp/flownotes.pdf cita Network Flows, de Ahuja, Magnanti y Orlin para algunos de los problemas. Este libro no tiene derechos de autor y se puede descargar desde http://archive.org/details/networkflows00ahuj, pero no parece contener este problema y esta solución (buscando cada aparición de "bipartito").
Tenga en cuenta que el párrafo explicativo de la solución no muestra que el corte más pequeño del gráfico que construye corresponde al conjunto independiente máximo . Solo muestra una forma de obtener un conjunto independiente.
Y, sin embargo, puede ver qué intenta hacer el algoritmo. Esto es lo que corresponde al conjunto independiente máximo real en términos de su corte s, t:
Se enfatiza el borde de capacidad infinita que rompe el algoritmo.
No estoy seguro de cómo arreglar el algoritmo para lo que se pretendía. ¿Quizás el costo de un borde infinito debería ser cero si va hacia atrás (es decir, dónde va de S a T, pero cruza de lado t a lado s)? Pero, ¿sigue siendo fácil encontrar el corte mínimo / flujo máximo con esta no linealidad? Además, al pensar en una forma de tender un puente desde la solución de @Jukka Suomela al algoritmo a partir de la pregunta, existe una dificultad en la que pasamos de la coincidencia máxima a la cobertura de vértice mínima: mientras que encontrar la coincidencia máxima se puede hacer mediante un flujo máximo -como algoritmo, ¿cómo se recupera la cobertura mínima de vértice utilizando un algoritmo de flujo? Como se describe aquí, después de encontrar la coincidencia máxima, los bordes entre U y V se dirigen para encontrar la cobertura mínima de vértice. Entonces, nuevamente, esto no muestra que una simple aplicación de min-cut / max-flow sea todo lo que se necesita para resolver este problema.
fuente
fuente
El corte debe estar en el flujo real, no en las capacidades. Como el flujo desde s es finito, cualquier corte {S, T} será finito. El resto es explicado anteriormente.
fuente
fuente