Prouver que le diagnostic graphique orienté est NP-difficile

11

J'ai un devoir à faire contre lequel je me bats la tête depuis un certain temps, et j'apprécierais tout indice. Il s'agit de choisir un problème connu, dont l'exhaustivité NP est prouvée, et de construire une réduction de ce problème au problème suivant que j'appellerai DGD (diagnostic de graphe dirigé).

Problème

Une instance de DGD se composent de sommets V = I . O . B , arêtes dirigées E et un entier positif k . Il existe trois types de sommets: sommets avec seulement bords entrants I , les sommets avec seulement des bords sortants O et les sommets avec les deux bords entrants et sortants B . Soit par ailleurs D = O × I .(V,E,k)V=I.O.BEkIOBD=O×I

Maintenant, le problème est de savoir si nous pouvons couvrir tous les nœuds avec au plus éléments de D , c'est-à-direkD

SD,|S|k. vV. (v1,v2)S. v1vv2

signifie qu'il y a un chemin dirigé de a vers b .abab


Je pense que le problème de l'ensemble dominant est celui que je devrais réduire, car cela aussi est préoccupé par la couverture d'un sous-ensemble de nœuds avec un autre sous-ensemble. J'ai essayé de créer une instance DGD en créant d'abord deux nœuds pour chaque élément de l'ensemble dominant, en copiant toutes les arêtes, puis en définissant le k de l'instance DGD égal à celui de l'instance DS.

Supposons une instance DS simple avec les nœuds , 2 et 3 et les arêtes ( 1 , 2 ) et ( 1 , 3 ) . Ceci est une instance de oui avec k = 1 ; l'ensemble dominant dans ce cas n'est constitué que du nœud 1 . Réduire avec la méthode qui vient d'être décrite, cela conduirait à une instance DGD avec deux chemins ( 1 2 1 ) et ( 1 3 1 123(1,2)(1,3)k=11(121)(131); pour couvrir tous les nœuds, une seule paire serait suffisante. Cela aurait parfaitement fonctionné s'il n'y avait pas eu le fait que l'ensemble dominant de l'instance DS ne puisse, bien entendu, être déterminé en temps polynomial, ce qui est une exigence ici.(1,1)

J'ai trouvé qu'il existe de nombreuses façons attrayantes de transformer les bords et les sommets lors de la réduction, mais mon problème consiste à exprimer le de DGD en termes de k de DS . Dominer l'ensemble semblait un problème approprié pour réduire, mais à cause de cela, je pense que je devrais peut-être essayer de réduire à partir d'un problème qui n'a pas un tel k ?kkk

user8879
la source
Bienvenue! J'ai essayé de clarifier l'énoncé du problème; c'est comme ça que tu le pensais? Btw, vous voudrez peut-être choisir un nom d'utilisateur plus reconnaissable que "user8879". :)
Raphael
Oui, merci, c'est en effet une version plus compacte.
user8879

Réponses:

9

Réduisez de SET-COVER NP-complet plutôt le .

Soit avec k N une instance de la couverture d'ensemble. Définissez une instance ( V , E , k ) de DGD comme ceci:S1,,Sm{1,,n}kN(V,E,k)

  • V={s1,,sm,o1,,om,e1,,en,o}
  • E={(si,oi)i=1,,n}{(si,ej)jSi}{(ej,o)j=1,,n}
  • k=m+k

Il est facile de voir que l'instance DGD construite a une réponse positive si et seulement si l'instance de set set donnée a une réponse positive. En particulier, toutes les paires ( s i , o i ) doivent être choisies quoi qu'il en soit afin de couvrir toutes les o i ; alors k des m paires ( s i , o ) doivent couvrir tous les e j , et les premiers composants de ceux choisis sont la solution de l'instance SET-COVER. Si un tel choix n'est pas possible, l'instance SET-COVER n'a pas non plus de solution.m(si,oi)oikm(si,o)ej

La construction étant possible en temps polynomial, cela prouve SET-COVER DGD.p


À titre d'exemple, considérons l'exemple d'instance set cover donné sur Wikipedia , à savoir et les ensembles S = { { 1 , 2 , 3 } , { 2 , 4 } , { 3 , 4 } , { 4 , 5 } } . Cela se traduit par le graphique suivant:{1,2,3,4,5}S={{1,2,3},{2,4},{3,4},{4,5}}

example
[ source ]

Raphael
la source
1
C'est presque correct, dans la mesure où I et B sont en effet complètement couverts, mais O ne l'est pas. L'instance set-cover est une instance oui pour k = 2, mais dans l'instance DGD k = 2 laisse s2 et s3 découverts. Je pense que cela peut probablement être résolu en ajoutant automatiquement un bord de chaque nœud de O à o .
user8879
@ user8879: Oh putain, c'est vrai. La façon dont le problème se pose maintenant, les bords(sje,o) ne le réparera pas parce que pour couvrir sje you need at least one pair containing it in S.
Raphael
Je l'ai maintenant: créez un nœud supplémentaire en B pour chaque nœud en O , puis liez-le à son nœud correspondant en O et à o . Dans cet exemple, vous obtenez quatre chemins supplémentaires (s1 -> s1 '-> o, etc.). Enfin, après avoir augmenté k avec quatre, il devrait être complet.
user8879
@ user8879: Corrigé maintenant. Nous avons besoin de quelques nœuds supplémentaires pour que toussjesont couverts, mais nous restons de taille polynomiale. (Oh, tu as commenté pendant que je réparais, bravo.)
Raphael