NP-Härte einer Set Cover Spezialisierung


8

Ist das folgende Problem NP-schwer?

Bei einer Menge von reellen Zahlen (Zielen) x 1 , , x N und einem "Dreizack", der durch zwei Abstände a , b von der Mitte des Dreizacks definiert ist, wie hoch ist die minimale Anzahl K der Positionen p 1 , ... , p K des Dreizacks, um alle Ziele abzudecken, dh K k = 1 { p k - a , p k , p k + b } { xNx1,,xNabKp1,,pK

k=1K{pka,pk,pk+b}{x1,,xN}.

Offensichtlich ist dies ein Sonderfall des Mengendeckungsproblems : Betrachtet man alle Mengen mit p k{ x n + t n { 1 , , N } , t { a , 0 , - b } }{pka,pk,pk+b}pk{xn+tn{1,,N},t{a,0,b}}Wir repräsentieren alle "relevanten" potenziellen Positionen und suchen nach der Mindestanzahl von Mengen, die das Universum abdecken . Entsprechend können wir das Problem als zweigeteilten Graphen von Positions- und Zielknoten darstellen und das Problem der Treffermenge betrachten .{x1,,xN}

Beachten Sie, dass das Problem nicht NP-schwer ist, wenn der Dreizack einen seiner "Zacken" verliert: Dann kann jedes Ziel von 2 Positionen aus abgedeckt werden und jede Position deckt höchstens 2 Ziele ab, sodass der entsprechende zweigeteilte Graph potenzieller Positionen und Ziele a ist Vereinigung von Pfaden. In jedem Pfad ist es einfach, eine minimale Schlagmenge zu bestimmen (nämlich die inneren Positionsknoten).

Aber ist der Dreizack-Fall NP-schwer?


4
Ich würde annehmen, dass dies in Polynomzeit unter Verwendung dynamischer Programmierung erfolgen könnte. Hast du das ausprobiert?
James King

Ich habe versucht, dynamisch zu programmieren, ich hatte einfach keinen Erfolg damit. Das Problem ist, dass die Positionen über Ziele vollständig miteinander verbunden werden können (denken Sie an viele Ziele mit den Entfernungen a und b), sodass das Ändern eines Ziels "globale" Auswirkungen haben kann. Dies macht es schwierig, das Problem aufzuteilen oder den Fall eines weiteren Ziels / einer weiteren Position auf den vorherigen Fall zu reduzieren. Andererseits erlaubt die "lokale" Art, wie die Positionen miteinander verknüpft sind, keine einfache Reduzierung von z. B. Set Cover. Mein Gefühl sagt mir immer noch, dass das Problem NP-schwer ist, aber ich bin mir wirklich nicht sicher.
Jan Pöschko

1
x1xixi

@James: Ich befürchte, dass mir etwas völlig fehlt, aber müssen Sie nicht auch unterscheiden, welche der Punkte x_ {i + 1},…, x_N „versehentlich“ von den bisher verwendeten Dreizacken abgedeckt werden?
Tsuyoshi Ito

@ TsuyoshiIto Ja auf jeden Fall. Ich gab nur einen kleinen Hinweis. Sie müssten solche Dinge überprüfen, wenn Sie die Arrays ausfüllen, aber das sollte nur eine konstante Zeit pro Punkt dauern.
James King

Antworten:


2

Überblick

kxi

Um zu beweisen, dass das Problem der numerischen Dreizackabdeckung NP-schwer ist, führen wir das folgende Zwischenproblem ein, das wir als Problem der Gitterdreieckabdeckung bezeichnen werden:

SZ+×Z+k

TZ×Z|T|kS(x,y)T{(x,y),(x,y+1),(x+1,y)}

k(1,1,2)(x,y)(x,y+1)(x+1,y)

Um zu zeigen, dass die numerische Dreizackabdeckung NP-hart ist, bieten wir zwei Reduzierungen an: eine Reduzierung von Planar 3SAT auf die Gitterdreieckabdeckung und eine Reduzierung von der Gitterdreieckabdeckung auf die numerische Dreizackabdeckung. Zusammen ergeben diese eine Reduktion vom NP-harten Problem Planar 3SAT zum Problem der numerischen Dreizackabdeckung, was impliziert, dass die numerische Dreizackabdeckung NP-hart ist.

p+q2p+q2(p,q)

Reduktion 1: Von der Gitterdreieckabdeckung zur numerischen Dreizackabdeckung.

SZ+×Z+k

x1,...,xNa,bk

Ss1=(p1,q1),s2=(p2,q2),...,s|S|=(p|S|,q|S|)i1N=|S|xi=pi+qi2a=1b=2k=k

Diese Reduktion ist eindeutig eine Polynomzeitoperation, so dass nur noch zu zeigen ist, dass die Reduktion die Antwort bewahrt.

xixixi+axibxiva+vb2vavbva+vb2fp+q2f(va+vb2)=(va,vb)fxisi

p+q2(p+1)+q2p+q2p+(q+1)2f(p,q)(p+1,q)(p,q+1)fSf1f

f{x1,...,x|S|}fS={s1,...,s|S|}={f(x1),...,f(x|S|)}f(1,12)xikSk(1,12)

Reduktion 2: Vom planaren 3SAT zur Gitterdreieckabdeckung.

Für diese Reduktion erhalten wir eine 3SAT-Instanz in Form eines planaren zweigliedrigen Graphen. Die Eckpunkte in einem Teil entsprechen Variablen, und die Eckpunkte des anderen Teils, jeweils vom Grad 3, entsprechen Klauseln. Jede Kante ist als positiv oder negativ gekennzeichnet und gibt an, auf welche Weise die Variable in die Klausel aufgenommen wird (positiv oder negativ).

(S,k)Sk

Zuerst beschreiben wir einen Draht. Ein Draht besteht aus einer Folge einer ungeraden Anzahl von Punkten (im ganzzahligen Gitter), an denen der erste und der letzte als Anschlüsse bezeichnet werden, sodass jedes aufeinanderfolgende Paar von einem Dreieck abgedeckt werden kann, ohne dass das Dreieck einen anderen Punkt im Draht trifft. Betrachten Sie als Beispiel den folgenden Draht:

xoo       x
   o       o
   o ooo   o
   o o  oooo
    oo

pp+12

Hier zeigen wir die zwei Möglichkeiten, um das Beispiel von oben abzudecken (wobei zwei Punkte mit derselben Nummer gekennzeichnet sind, wenn sie mit demselben Dreieck abgedeckt sind):

x11       9
   2       9
   2 556   8
   3 4  6778
    34

oder

112       x
   2       9
   3 566   9
   3 5  7788
    44

Eine Sorge ist, dass wir möglicherweise zwei Klemmen mit einem Draht verbinden möchten, dies jedoch nicht können, da jeder "Draht" zwischen diesen beiden Klemmen eine gerade Länge haben würde. Dies ist jedoch nicht der Fall: Wir können immer eine Route für einen Draht wählen, damit dieser Draht eine ungerade Länge hat (und daher ein gültiger Draht ist). Durch Ersetzen eines horizontalen Drahtsegments der Länge 6 durch das folgende Drahtsegment der Länge 7 kann die Parität der Drahtlänge festgelegt werden:

oo  oo
  ooo 

Als nächstes führen wir ein Klausel-Gadget ein. Eine Klausel verbindet einfach einen der Anschlüsse von drei Drähten so, dass, wenn einer der Drähte erfüllt ist, so dass der gemeinsam genutzte Anschluss abgedeckt ist, das Dreieck, das diesen gemeinsam genutzten Anschluss abdeckt, keine Punkte von den anderen Drähten abdeckt:

      o
      o
      o
   ooox
       ooo

Damit der gemeinsam genutzte Anschluss abgedeckt werden kann, muss mindestens einer der drei Drähte so erfüllt sein, dass die Dreiecke, die den Draht erfüllen, den nicht gemeinsam genutzten Anschluss der Drähte nicht abdecken.

Schließlich stellen wir das variable Gadget vor. Das variable Gadget ist eine große drahtähnliche Schleife (von gerader Länge) mit Klemmen, die optional alle drei Zeilen wie folgt seitlich auftreten:

oo
o o
o ox
o o
o o
o ox
o o
o o
o ox
o o
o o
o ox
o o
 oo

Die Variable kann vertikal wachsen, um die erforderliche Anzahl von Terminals aufzunehmen. Die Terminals in Reihen mit gerader Parität entsprechen positiven Vorkommen der Variablen und diejenigen in Reihen mit ungerader Parität entsprechen negativen Vorkommen. Wie bei Wire können die nicht terminalen Punkte des variablen Gadgets mit der minimalen Anzahl von Dreiecken (die Hälfte der Anzahl von Punkten in der Schleife) auf genau zwei Arten erfüllt werden. Diese beiden Einstellungen decken entweder alle Terminals für positives Auftreten oder alle Terminals für negatives Auftreten des variablen Gadgets ab.

Alles zusammen zu setzen ist ziemlich offensichtlich: Wir erstellen das zweiteilige Diagramm mit variablen Gadgets, Klausel-Gadgets (gemeinsam genutzte Terminals) und Drähten, die die Terminals verbinden. Die Gesamtzahl der Dreiecke, die erforderlich sind, um die nicht terminalen Punkte der Drähte und Variablen abzudecken, ist dann die Zielanzahl der Dreiecke.

Natürlich können wir nicht das gesamte Gitter mit weniger als diesen Dreiecken abdecken. Darüber hinaus können wir sicher sein, dass die nicht terminalen Punkte jeweils abgedeckt sind, da die Variablen und Drähte jeweils auf eine der beiden beschriebenen Arten erfüllt werden. Die einzige Aufgabe besteht also darin, die Terminals zu befriedigen.

Bei jeder Variablen werden entweder alle positiven oder alle negativen Vorkommensterminals vom Variablen-Gadget erfüllt. Die anderen Anschlüsse am Gadget müssen durch die angeschlossenen Kabel zufrieden sein. Dann können die Klauselklemmen genau dann erfüllt werden, wenn jede Klausel an mindestens eine Leitung angeschlossen ist, deren andere Klemme die Leitung noch nicht verbraucht hat (eine Leitung, deren andere Klemme durch das angeschlossene variable Gadget erfüllt wurde). Mit anderen Worten, die Terminals sind alle genau dann erfüllt, wenn die Zuweisung von Variablen gemäß den Einstellungen der Variablen-Gadgets jede Klausel erfüllt.

Wie Sie sehen können, ist die erzeugte Grid Triangle Cover-Instanz genau dann eine Ja-Instanz, wenn die eingegebene Planar 3SAT-Instanz eine Ja-Instanz ist. Da diese Reduktion auch eine Polynomzeit ist (alle Gadgets benötigen ein Raumpolynom in der Größe der Eingabeinstanz), schließen wir, dass wir eine gültige Reduktion haben.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.