Faustregel, um zu wissen, ob ein Problem NP-vollständig sein könnte

26

Diese Frage wurde durch einen Kommentar zu StackOverflow inspiriert .

Abgesehen von der Kenntnis der NP-vollständigen Probleme des Buches von Garey Johnson und vieler anderer; Gibt es eine Faustregel, um zu wissen, ob ein Problem wie ein NP-vollständiges Problem aussieht?

Ich suche nicht etwas Strenges, sondern etwas, das in den meisten Fällen funktioniert.

Natürlich müssen wir jedes Mal beweisen, dass ein Problem NP-vollständig oder eine geringfügige Variante eines NP-vollständigen Problems ist. aber bevor man zum Beweis eilt, wäre es großartig, sicheres Vertrauen in das positive Ergebnis des Beweises zu haben.

Виталий Олегович
quelle
8
Meine Faustregel ist einfach: Wenn es nicht nach einem Problem riecht, mit dem ich bereits vertraut bin, ist es wahrscheinlich NP-hart (oder schlimmer).
JeffE
12
@JeffE Natürlich kennen Sie mittlerweile einige Probleme ... Neueinsteiger in CS können möglicherweise nicht die gleiche Regel anwenden.
Joe
1
@ Joe: Stimmt. Vielleicht wäre es besser zu sagen: Wenn Sie das Problem nicht aus einem Lehrbuch kennen, ist es wahrscheinlich NP-schwer.
JeffE
2
Anders ausgedrückt: Es ist überraschend, wenn ein Problem nicht NP-schwer ist, sondern wenn ein Problem NP-schwer ist.
Joe

Antworten:

15

Dies ist mein persönlicher Ansatz, um festzustellen, ob ein Problem (dh eine Sprache ) NP-vollständig ist oder nicht. Wenn beide Bedingungen überprüft werden:L

  • Wenn prüfe , ob sich eine Instanz in , muss ich alle möglichen Kombinationen überprüfenLIL
  • und dass es keine Möglichkeit gibt, eine solche Kombination in zwei kleinere aufzuteilen

dann kann durchaus NP-hart sein.L

Zum Beispiel muss ich für das Teilmengen-Summenproblem alle Teilmengen von auflisten und prüfen, ob es eine gibt, deren Summe Null ist. Kann ich in zwei kleinere Teilmengen und aufteilen, auf denen ich eine ähnliche Eigenschaft überprüfe? Humm ... nicht wirklich. Vielleicht würde ich nach allen Kombinationen von und aber das wäre wirklich lang ...S S 1 S 2 S 1 S 2SSS1S2S1S2

Normalerweise ist die Fähigkeit, in kleinere Teile zu zerbrechen, ein guter Indikator für ein Problem in P. Dies ist der Divide-and-Conquer- Ansatz. Zum Beispiel des kürzesten Weg zwischen zwei Punkten zu finden, können Sie die Eigenschaft , dass , wenn der kürzeste Weg von nach durchläuft dann ist es nicht länger als der kürzeste Weg von nach und den kürzesten von auf .C B A B B CACBABBC

Ehrlich gesagt ist dieser Ansatz sehr einfach: Ich versuche, einen (polynomiellen) Algorithmus für das gegebene Problem zu finden. Wenn ich keinen finde, wird das Problem aus meiner Sicht "schwer". Dann kommt die ganze NP-Vollständigkeitsüberlegung: Kann ich ein bestehendes NP-vollständiges Problem in dieses kodieren? (Und da dies normalerweise viel schwieriger ist, versuche ich noch einmal, einen Polynomalgorithmus zu finden.)

Ich vermute, dass dies die übliche Denkweise ist. Es bleibt jedoch ziemlich schwierig, sich auf unbekannte Probleme anzuwenden. Ich erinnere mich, dass mich eines der ersten Beispiele für NP-Vollständigkeit überrascht hat: das Clique-Problem . Es schien so einfach zu überprüfen! Ich nehme an, diese Erfahrung hat viel damit zu tun. Auch Intuition kann manchmal unbrauchbar sein. Ich erinnere mich, dass mir mehrmals zwei fast identische Probleme erzählt wurden, von denen eines in P und das andere mit einer kleinen Variation NP-vollständig war.

Ich muss noch ein gutes Beispiel finden (ich brauche hier Hilfe), aber das ist wie das Post-Korrespondenz-Problem : Dies ist ein unentscheidbares Problem, aber einige Varianten sind entscheidbar.

jmad
quelle
7
Ein Beispiel, das ich wirklich mag, ist das folgende. Stellen Sie sich das Problem, die Determinante einer Matrix zu berechnen. Dies ist ein einfaches Problem in P. Ändern Sie nun einfach das Vorzeichen in der Determinantenformel in anstatt zwischen -1 und +1 zu wechseln, und Sie erhalten die bleibende Zahl , die ein # P-vollständiges Problem ist. +1
Massimo Cafaro
2
Eine interessante Ausnahme von der Faustregel sind Optimierungsprobleme, die mit linearer Programmierung gelöst werden können. Wenn Sie noch nicht von dem Trick gehört haben, kann es schwierig sein zu sehen, wie Probleme wie das Zuweisungsproblem oder der Graphabgleich in Polyzeit gelöst werden können, da Tricks wie Teilen und Erobern und dynamisches Programmieren scheinbar nicht zutreffen.
Umarmung
Ein Beispiel ist das Longest Common Subsequence-Problem, das für 2 Sequenzen in P steht, aber mit mehr in NP-Hard gerät.
Christian Vielma
14

Eine andere Perspektive auf die Problemhärte ergibt sich aus der Spiel- und Puzzle-Community, in der die Faustregel lautet: "Probleme sind so schwer wie sie nur sein können" (und die Ausnahmen stammen von verborgenen Strukturen in dem Problem - Massimos Beispiel für die Determinante in Kommentare sind ein gutes Beispiel dafür); Der Trick dabei ist, zu verstehen, wie schwer ein Problem sein kann:

  • Rätsel, die das Vorhandensein einer statischen Konfiguration beinhalten, befinden sich in NP und sind daher in der Regel NP-vollständig. Zum Beispiel ist das Problem der Polyomino-Packung (kann eine gegebene Menge von Polyominos ein gegebenes Rechteck der entsprechenden Fläche packen?) NP-vollständig.n
  • Rätsel, die eine Folge von Bewegungen innerhalb eines begrenzten Zustandsraums beinhalten, befinden sich in PSPACE (da der "Bewegungsbaum" im Allgemeinen in der Art und Weise erforscht werden kann, in der nur Speicher für eine polynomielle Anzahl von Konfigurationen benötigt wird) und dazu neigen, PSPACE-vollständig zu sein; ein klassisches Beispiel hierfür ist die Rush Hour.
  • Spiele mit einer polynomial begrenzten Tiefe gibt es auch in PSPACE; Hierbei wird die Charakterisierung von PSPACE als APTIME verwendet, da die übliche Min-Max-Charakterisierung von Strategien eine alternierende Turing-Maschine mit der Charakterisierung „Es gibt einen Zug für Spieler A, sodass für jeden Antwortzug von Spieler B eine Antwort vorhanden ist bewege dich für Spieler A so, dass ... 'usw. Sie neigen auch dazu, PSPACE-vollständig zu sein; Hex- und verallgemeinerte Tic-Tac-Toe-Spiele sind Beispiele dafür.
  • Spiele ohne Baumtiefenbegrenzung, die jedoch in einem (polynomiell) begrenzten Raum gespielt werden, sind EXPTIME, da es exponentiell viele Gesamtpositionen gibt und der gesamte Graph in der Anzahl der Positionen (und damit insgesamt exponentiell) zeitpolynomiell aufgebaut und untersucht werden kann. ; Diese Spiele sind in der Regel EXPTIME-vollständig. Schach, Dame und Los fallen alle in diese Kategorie.
Steven Stadnicki
quelle