Recolorear gráficos bipartitos


8

Dado un gráfico bipartito donde cada vértice está coloreado de rojo o azul, estoy tratando de minimizar el número de vértices azules usando la siguiente operación:G=(A,B,E)

  1. Elija un vértice envaA
  2. Voltee los colores de , lo que significa que y todos los vecinos de cambiarán de color.N[va]vava

¿Existe un algoritmo de tiempo polinómico para seleccionar un conjunto de recoloración que minimice la cantidad de vértices azules? El número de coloraciones necesarias no es relevante.XUNA

Observe que el orden de volteo no importa, y por cada vértice en , lo voltea o no. Podemos pensar en los colores como un número que se incrementa en el módulo 2. Esto produce un algoritmo trivial .UNAO(2El |UNAEl |norte)

Respuestas:


6

El problema es NP-completo y, por lo tanto, no es probable que admita un algoritmo de tiempo polinómico. A continuación se muestra una prueba de la completitud NP del problema, que se muestra mediante una reducción de 1 en 3 SAT.

Sea una instancia de 1-IN-3-SAT, donde se nos da una fórmula 3-CNF-SAT para encontrar una asignación satisfactoria donde cada cláusula se satisface exactamente con un literal. Sea el conjunto de variables y el conjunto de cláusulas.ϕV(ϕ)norteC(ϕ)metro

Construimos una instancia con un presupuesto de (el número permitido de vértices azules).sol=(UNA,si,mi)si=norte+metro

Para cada variable , construya dos vértices rojos y en junto con vértices azules en adyacentes a ambos. Esto obliga a exactamente uno de o . También terminamos con "vértices variables" invertidos, utilizando así la primera parte del presupuesto.XV(ϕ)vXvX¯UNAsi+1sivXvX¯norte

Observación: son los únicos vértices en .{vX,vX¯XV(ϕ)}UNA

Para cada cláusula, digamos , creamos vértices azules y tres vértices rojos adicionales , todos en . Deje que estén completamente adyacentes a los vértices azules y conecte a , a , y a .C=Xy¯zsi+1vXC,vy¯C,vzCsivX,vy¯,vzsi+1vXvXCvyvy¯CvzvzC

gadget de reducción

Ahora, dado que cada gadget de cláusula tiene vértices azules , sabemos que se han invertido uno o tres literales en esa cláusula. Supongamos que tres se voltearon por una de las cláusulas. Pero luego usamos al menos el presupuesto .si+1norte+metro+2

Supongamos que es una instancia de sí con una asignación 1 en 3 . Voltea cada vértice que corresponde a . Como cada cláusula se satisface con exactamente una variable, para cada cláusula ahora hay un vértice azul, y para cada variable, exactamente una de ellas es azul, por lo tanto tenemos vértices azules.ϕα:V(ϕ){,}αnorte+metro=si


En el tercer párrafo, ¿los vértices agregados para cada van a ? XXsi
Luke Mathieson

+1. Tengo una pregunta ingenua: ¿por qué cada grupo de vértices azules contiene 6 puntos (en lugar de 5 = 3 + 1 + 1)?
hengxin

1
@hengxin Solo quería dibujar "suficientes" vértices azules. Mientras haya al menos vértices todo funciona, pero sí, tienes razón. si+1
Pål GD

3

Pål GD explica que el problema es NP-hard, por lo que el siguiente paso es tratar de encontrar algoritmos razonables para su problema.

Notaré que su problema puede reducirse a CÓDIGO DE PESO MÍNIMO: dado un código lineal, busque una palabra de código de peso mínimo. Otra forma de plantear este problema es: dada una matriz booleana y un vector booleano , encuentre un vector booleano no cero tal que el peso de Hamming de se minimice. (Toda la aritmética se realiza en el módulo 2). Se sabe que la CODEWORD DE PESO MÍNIMO es NP-hard, pero hay algunos algoritmos que son más rápidos que la fuerza bruta.METROyXMETROXy

Aquí está la conexión. Si hay vértices, puede pensarse que cualquier vector booleano de bits especifica qué vértices se voltearán mediante una operación de volteo particular. Por lo tanto, para cada vértice obtenemos un vector flip correspondiente . Póngalos en una matriz , donde cada fila corresponde a un flip-vector diferente. Sea un vector booleano de bits que especifica los colores originales de los vértices (azul = 1, rojo = 0). Ahora el objetivo es encontrar un vector booleano que minimice el peso de Hamming denortenortevmetrovnorte×norteynorteXMETROvy. Cualquiera de estos vectores corresponde inmediatamente a un conjunto de operaciones de volteo que minimiza el número de vértices azules en el gráfico.

Con estos antecedentes, es posible que pueda aplicar a su problema algoritmos conocidos para encontrar palabras de código de peso mínimo en códigos lineales. El tiempo de ejecución seguirá siendo exponencial, pero más rápido que probar todas las posibilidades para . X


Esto es realmente muy divertido ya que me encontré con esto mientras trataba de resolver un sistema lineal mod 2. No sabía que el problema se llamaba palabra de código de peso mínimo. ¡Gracias!
Davis Yoshida
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.