Recolorindo gráficos bipartidos

8

Dado um gráfico bipartido onde cada vértice é colorido em vermelho ou azul, estou tentando minimizar o número de vértices azuis usando a seguinte operação:G=(UMA,B,E)

  1. Escolha um vértice emvumaUMA
  2. Inverta as cores de , o que significa que e todos os vizinhos de mudarão de cor.N[vuma]vumavuma

Existe um algoritmo de tempo polinomial para selecionar um conjunto de recoloração que minimize o número de vértices azuis? O número de recolorações necessárias não é relevante.XUMA

Observe que a ordem do lançamento não importa e, para cada vértice em , você o vira ou não. Podemos pensar nas cores como um número que é incrementado no módulo 2. Isso gera um algoritmo trivial .UMAO(2|UMA|n)

Davis Yoshida
fonte

Respostas:

6

O problema é NP-completo e, portanto, não é provável que admita um algoritmo de tempo polinomial. Abaixo está uma prova da completude da NP do problema, mostrada por uma redução de 1 em 3-SAT.

Seja uma instância de 1-IN-3-SAT, em que recebemos uma fórmula 3-CNF-SAT solicitada a encontrar uma atribuição satisfatória em que cada cláusula seja satisfeita por exatamente um literal. Seja o conjunto de variáveis ​​e o conjunto de cláusulas .ϕV(ϕ)nC(ϕ)m

Construímos uma instância com um orçamento de (o número permitido de vértices azuis).G=(A,B,E)b=n+m

Para cada variável , construir dois vértices vermelhos e em em conjunto com vértices azuis em adjacentes a ambos. Isso força exatamente um de ou a ser invertido. Também terminamos com "vértices variáveis" invertidos, usando assim a primeira parte do orçamento.xV(ϕ)vxvx¯Ab+1Bvxvx¯n

Observação: são as únicas em vértices .{vx,vx¯xV(ϕ)}A

Para cada cláusula, digamos , criamos vértices azuis e três vértices vermelhos extras , todas em . Seja todos totalmente adjacentes aos vértices azuis e conecte a , a , e a .c=xy¯zb+1vxc,vy¯c,vzcBvx,vy¯,vzb+1vxvxcvyvy¯cvzvzc

gadget de redução

Agora, como cada gadget de cláusula tem vértices azuis, sabemos que um ou três literais nessa cláusula foram invertidos. Suponha que três foram invertidos para uma das cláusulas. Mas então usamos pelo menos o orçamento .b+1n+m+2

Suponha que seja uma instância yes com uma atribuição 1 em 3 . Inverta todos os vértices que correspondem a . Como cada cláusula é satisfeita por exatamente uma variável, para cada cláusula existe agora um vértice azul e, para cada variável, exatamente uma delas é azul; portanto, temos vértices azuis.ϕα:V(ϕ){,}αn+m=b

Pål GD
fonte
No terceiro parágrafo, os vértices adicionados para cada entram em ? xXB
Luke Mathieson
+1. Tenho uma pergunta ingênua: por que cada grupo de vértices azuis contém 6 pontos (em vez de 5 = 3 + 1 + 1)?
precisa saber é o seguinte
1
@hengxin Eu só queria desenhar vértices azuis "suficientes". Contanto que haja pelo menos vértices, tudo funcionará, mas sim, você está certo. b+1
precisa saber é o seguinte
3

Pål GD explica que o problema é difícil para NP, portanto, o próximo passo é tentar encontrar algoritmos razoáveis ​​para o seu problema.

Observarei que seu problema pode ser reduzido para CÓDIGO MÍNIMO DE PESO: dado um código linear, encontre uma palavra de código com peso mínimo. Outra maneira de afirmar esse problema é: dada uma matriz booleana e um vetor booleano , encontre um vetor booleano diferente de zero modo que o peso Hamming de seja minimizado. (Toda aritmética é executada no módulo 2.) O CÓDIGO DE PESO MÍNIMO é conhecido por ser NP-rígido, mas existem alguns algoritmos para ele que são mais rápidos que a força bruta.MyxMxy

Aqui está a conexão. Se houver vértices, qualquer vetor booleano de bits poderá ser considerado como especificando quais vértices serão invertidos por uma operação de inversão específica. Assim, para cada vértice , obtemos um vetor de flip correspondente . Coloque-os em uma matriz , em que cada linha corresponde a um flip-vetor diferente. Seja um vetor booleano de bits que especifique as cores originais dos vértices (azul = 1, vermelho = 0). Agora, o objetivo é encontrar um vetor booleano que minimize o peso de Hamming dennvmvn×nynxMvy. Qualquer vetor desse tipo corresponde imediatamente a um conjunto de operações inversas que minimiza o número de vértices azuis no gráfico.

Com esse histórico, você pode aplicar algoritmos conhecidos para localizar palavras de código de peso mínimo em códigos lineares para o seu problema. O tempo de execução ainda será exponencial, mas mais rápido do que tentar todas as possibilidades para . x

DW
fonte
Isso é realmente engraçado, enquanto eu tentava resolver um sistema linear mod 2. Eu não sabia que o problema era chamado de palavra-código com peso mínimo. Obrigado!
Davis Yoshida