Une approche pour résoudre ce problème serait d'utiliser la programmation linéaire entière (ILP). Abordons la version décisionnelle du problème: étant donné , existe-t-il un moyen de contracter des sommets de même couleur pour obtenir un DAG de taille ?≤ kk≤ k
Cela peut être exprimé comme une instance ILP en utilisant des techniques standard. On nous donne la couleur de chaque sommet dans le graphique d'origine. Je suggère que nous étiquetons chaque sommet avec une étiquette dans ; tous les sommets avec la même étiquette et la même couleur seront contractés. Ainsi, le problème de décision devient: existe-t-il un étiquetage, tel que la contraction de tous les sommets de même couleur de même étiquette donne un DAG?{ 1 , 2 , … , k }
Pour exprimer cela comme un programme linéaire entier, introduisez une variable entière pour chaque sommet , pour représenter l'étiquette sur le sommet . Ajoutez l'inégalité . v v 1 ≤ ℓ v ≤ kℓvvv1 ≤ ℓv≤ k
L'étape suivante consiste à exprimer l'exigence selon laquelle le graphique contracté doit être un DAG. Notez que s'il existe un étiquetage du formulaire ci-dessus, sans perte de généralité, il existe un tel étiquetage où les étiquettes induisent un tri topologique sur le graphique contracté (c'est-à-dire, si précède dans le graphique contracté, alors l'étiquette de est plus petit que 'étiquette de ). Donc, pour chaque arête dans le graphe d'origine, nous ajouterons la contrainte selon laquelle soit et ont la même étiquette et la même couleur, soit l' étiquette de est plus petite que l'étiquette de . Plus précisément, pour chaque arêtew v w v → w v w v w v → w v , w ℓ v ≤ ℓ w v → w v , w ℓ v < ℓ wvwvwv → wvwvwv → wdans le graphe initial où ont la même couleur, ajoutez l'inégalité . Pour chaque arête où ont des couleurs différentes, ajoutez l'inégalité .v , wℓv≤ ℓwv→ wv, wℓv< ℓw
Voyons maintenant s'il existe une solution possible à ce programme linéaire entier. Il y aura une solution réalisable si et seulement si l'étiquetage est de la forme souhaitée (c'est-à-dire que la contraction de tous les sommets de même couleur de même étiquette donne un DAG). En d'autres termes, il y aura une solution réalisable si et seulement s'il existe un moyen de contracter le graphe d'origine à un DAG de taille . Nous pouvons utiliser n'importe quel solveur de programmation linéaire entier; si le solveur ILP nous donne une réponse, nous avons une réponse au problème de décision d'origine.≤ k
Bien sûr, cela n'est pas garanti de se terminer en temps polynomial. Il n'y a aucune garantie. Cependant, les solveurs ILP sont devenus assez bons. Je m'attends à ce que, pour un graphique de taille raisonnable, vous ayez une chance décente qu'un solveur ILP puisse résoudre ce problème dans un délai raisonnable.
Il est également possible de coder cela en tant qu'instance SAT et d'utiliser un solveur SAT. Je ne sais pas si ce serait plus efficace. Cependant, la version ILP est probablement plus facile à penser.
(J'espère que cela est vrai. Je n'ai pas vérifié tous les détails attentivement, alors s'il vous plaît revérifiez mon raisonnement! J'espère que je n'ai pas mal tourné quelque part.)
Mise à jour (10/21): Il semble que les ILP de cette forme puissent être résolus en temps linéaire, en traitant le DAG dans un ordre trié par topologie et en gardant une trace de la limite inférieure sur l'étiquette pour chaque sommet. Cela me fait douter de ma solution: ai-je fait une erreur quelque part?