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.
complexity-theory
np-complete
intuition
Виталий Олегович
quelle
quelle
Antworten:
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
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 2S S S1 S2 S1 S2
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 CA C B A B B C
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.
quelle
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:
quelle