Grafici bipartiti ricoloranti


8

Dato un grafico bipartito cui ogni vertice è colorato di rosso o blu, sto cercando di minimizzare il numero di vertici blu usando la seguente operazione:G=(A,B,E)

  1. Scegli un vertice invaA
  2. Capovolgi i colori di , il che significa che e tutti i vicini di cambieranno colore.N[va]vava

Esiste un algoritmo temporale polinomiale per selezionare un set ricolorante che minimizzerà il numero di vertici blu? Il numero di ricolorazioni necessarie non è rilevante.XA

Osserva che l'ordine di capovolgere non ha importanza, e per ogni vertice in , lo capovolgi o no. Possiamo pensare ai colori come un numero che viene incrementato modulo 2. Questo produce un banale algoritmo .AO(2|A|n)

Risposte:


6

Il problema è NP-completo e pertanto non è probabile che ammetta un algoritmo temporale polinomiale. Di seguito è una prova della completezza NP del problema, dimostrata da una riduzione da 1 in 3-SAT.

Sia un'istanza di 1-IN-3-SAT, in cui ci viene data una formula 3-CNF-SAT che ci chiede di trovare un incarico soddisfacente in cui ogni clausola è soddisfatta esattamente da un letterale. Sia l'insieme di variabili e l'insieme di clausole .ϕV(ϕ)nC(ϕ)m

Costruiamo un'istanza con un budget di (il numero consentito di vertici blu).G=(A,B,E)b=n+m

Per ogni variabile , costruisci due vertici rossi e in insieme a vertici blu in adiacenti ad entrambi. Questo impone di esattamente uno di o . Finiamo anche con "vertici variabili" capovolti, utilizzando così la prima parte del budget.xV(ϕ)vxvx¯Ab+1Bvxvx¯n

Nota: sono i soli vertici in .{vX,vX¯|XV(φ)}UN

Per ogni clausola, diciamo , creiamo vertici blu e tre vertici rossi extra , il tutto in . Lascia che siano tutti completamente adiacenti ai vertici blu e collega a , a , e da a .c=Xy¯zB+1vXc,vy¯c,vzcBvX,vy¯,vzB+1vXvXcvyvy¯cvzvzc

gadget di riduzione

Ora, poiché ogni gadget della clausola ha vertici blu, sappiamo che uno o tre letterali in quella clausola sono stati capovolti. Supponiamo che tre siano stati capovolti per una delle clausole. Ma poi utilizziamo almeno il budget .B+1n+m+2

Supponiamo che sia un'istanza yes con un'assegnazione 1 in 3 . Capovolgi ogni vertice che corrisponde a . Poiché ogni clausola è soddisfatta esattamente da una variabile, per ogni clausola ora c'è un vertice blu, e per ogni variabile, esattamente una di esse è blu, quindi abbiamo vertici blu.φα:V(φ){,}αn+m=B


Nel terzo paragrafo, i vertici aggiunti per ogni vanno in ? XXB
Luke Mathieson,

+1. Ho una domanda ingenua: perché ogni gruppo di vertici blu contiene 6 punti (anziché 5 = 3 + 1 + 1)?
hengxin,

1
@hengxin Volevo solo disegnare "abbastanza" vertici blu. Finché ci sono almeno vertici, tutto funziona, ma, sì, hai ragione. b+1
Pål GD,

3

Pål GD spiega che il problema è NP-difficile, quindi il passo successivo è cercare di trovare algoritmi ragionevoli per il tuo problema.

Noterò che il tuo problema può essere ridotto a CODICE DI PESO MINIMO: dato un codice lineare, trova una parola in codice di peso minimo. Un altro modo per affermare questo problema è: data una matrice booleana e un vettore booleano , trovare un vettore booleano diverso da zero tale che il peso di Hamming di sia ridotto al minimo. (Tutta l'aritmetica viene eseguita modulo 2.) PESO MINIMO CODEWORD è noto per essere NP-difficile, ma ci sono alcuni algoritmi che sono più veloci della forza bruta.MyXMXy

Ecco la connessione. Se ci sono vertici, allora qualsiasi vettore booleano bit può essere considerato come specificare quali vertici saranno lanciati da una particolare operazione di capovolgimento. Quindi per ogni vertice otteniamo un corrispondente flip-vector . Mettili in una matrice , dove ogni riga corrisponde a un diverso vettore a fogli mobili. Sia un vettore booleano a bit che specifica i colori originali dei vertici (blu = 1, rosso = 0). Ora l'obiettivo è trovare un vettore booleano che minimizzi il peso di Hamming dinnvmvn×nynXMvy. Ogni vettore di questo tipo corrisponde immediatamente a una serie di operazioni di inversione che minimizza il numero di vertici blu nel grafico.

Con questo background, potresti essere in grado di applicare al tuo problema algoritmi noti per trovare parole in codice di peso minimo in codici lineari. Il tempo di esecuzione sarà comunque esponenziale, ma più veloce di provare tutte le possibilità per . X


Questo in realtà è piuttosto divertente mentre mi sono imbattuto in questo mentre cercavo di risolvere un sistema lineare mod 2. Non ero a conoscenza del fatto che il problema era chiamato codeword peso minimo. Grazie!
Davis Yoshida,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.