Recoloration des graphes bipartis

8

Étant donné un graphique bipartite G=(A,B,E) où chaque sommet est coloré en rouge ou en bleu, j'essaie de minimiser le nombre de sommets bleus en utilisant l'opération suivante:

  1. Choisissez un sommet va dans A
  2. Retournez les couleurs de N[va], ce qui signifie que va et chaque voisin de va changera de couleur.

Existe-t-il un algorithme de temps polynomial pour sélectionner un ensemble de recoloration XAqui minimisera le nombre de sommets bleus? Le nombre de recolorations nécessaires n'est pas pertinent.

Observez que l'ordre de retournement n'a pas d'importance, et pour chaque sommet de A, soit vous le retournez, soit vous ne le faites pas. Nous pouvons penser aux couleurs comme un nombre qui est incrémenté modulo 2. Cela donne un trivialO(2|A|n) algorithme.

Davis Yoshida
la source

Réponses:

6

Le problème est NP-complet et n'est donc pas susceptible d'admettre un algorithme de temps polynomial. Vous trouverez ci-dessous une preuve de la complétude NP du problème, illustrée par une réduction de 1-en-3-SAT.

Laisser ϕêtre une instance de 1-IN-3-SAT, où l'on nous donne une formule 3-CNF-SAT demandée pour trouver une affectation satisfaisante où chaque clause est satisfaite par exactement un littéral. LaisserV(ϕ) être l'ensemble des n les variables, et C(ϕ) être l'ensemble des m clauses.

Nous construisons une instance G=(A,B,E) avec un budget de b=n+m (le nombre autorisé de sommets bleus).

Pour chaque variable xV(ϕ), construire deux sommets rouges vx et vx¯ dans A ensemble avec b+1 sommets bleus dans Bà côté de chacun d'eux. Cela force exactement l'un desvx ou vx¯à retourner. On se retrouve aussi avecn inversé les "sommets variables", utilisant ainsi la première partie du budget.

Remarque: {vx,vx¯xV(ϕ)} sont les seuls sommets A.

Pour chaque clause, dites c=xy¯z, nous créons b+1 sommets bleus et trois sommets rouges supplémentaires vxc,vy¯c,vzc, tout en B. Laisservx,vy¯,vz tous soient entièrement adjacents à la b+1 sommets bleus et connectez vx à vxc, vy à vy¯c, et vz à vzc.

gadget de réduction

Maintenant, puisque chaque gadget de clause a b+1les sommets bleus, nous savons qu'un ou trois littéraux de cette clause ont été inversés. Supposons que trois ont été inversés pour l'une des clauses. Mais nous utilisons au moins le budgetn+m+2.

Supposer que ϕ est une instance oui avec une affectation 1 sur 3 α:V(ϕ){,}. Retournez chaque sommet qui correspond àα. Puisque chaque clause est satisfaite par exactement une variable, pour chaque clause il y a maintenant un sommet bleu, et pour chaque variable, exactement l'une d'entre elles est bleue, d'où nous avonsn+m=b sommets bleus.

Pål GD
la source
Dans le troisième paragraphe, les sommets ajoutés pour chaque xX entrer dans B?
Luke Mathieson
+1. J'ai une question naïve: pourquoi chaque groupe de sommets bleus contient-il 6 points (au lieu de 5 = 3 + 1 + 1)?
hengxin
1
@hengxin Je voulais juste dessiner "assez" de sommets bleus. Tant qu'il y a au moinsb+1vertices tout fonctionne, mais oui, vous avez raison.
Pål GD
3

Pål GD explique que le problème est NP-difficile, donc la prochaine étape est d'essayer de trouver des algorithmes raisonnables pour votre problème.

Je noterai que votre problème peut être réduit à MOT DE CODE DE POIDS MINIMUM: étant donné un code linéaire, trouvez un mot de code de poids minimum. Une autre façon d'énoncer ce problème est la suivante: étant donné une matrice booléenneM et un vecteur booléen y, trouver un vecteur booléen non nul x de telle sorte que le poids de Hamming Mxyest minimisé. (Toute l'arithmétique est effectuée modulo 2.) LE MOT DE CODE MINIMUM DE POIDS est connu pour être NP-dur, mais il existe certains algorithmes plus rapides que la force brute.

Voici la connexion. S'il y an sommets, puis tout nLe vecteur booléen -bit peut être considéré comme spécifiant quels sommets seront inversés par une opération de retournement particulière. Ainsi pour chaque sommetv on obtient un flip-vector correspondant mv. Mettez-les dans unn×nmatrice, où chaque ligne correspond à un vecteur de bascule différent. Laissery être un nvecteur booléen à deux bits qui spécifie les couleurs d'origine des sommets (bleu = 1, rouge = 0). Maintenant, le but est de trouver un vecteur booléenx qui minimise le poids de Hamming Mvy. Un tel vecteur correspond immédiatement à un ensemble d'opérations de retournement qui minimise le nombre de sommets bleus dans le graphique.

Dans ce contexte, vous pourrez peut-être appliquer des algorithmes connus pour trouver des mots de code de poids minimum dans des codes linéaires à votre problème. Le temps d'exécution sera toujours exponentiel, mais plus rapide que d'essayer toutes les possibilités dex.

DW
la source
C'est en fait assez drôle car j'ai rencontré cela en essayant de résoudre un système linéaire mod 2. Je ne savais pas que le problème s'appelait un mot de code de poids minimum. Je vous remercie!
Davis Yoshida