Kürzlich, als ich mit einem Physiker sprach, behauptete ich, dass meiner Erfahrung nach, wenn sich herausstellt, dass ein Problem, das naiv exponentiell zu dauern scheint, nicht trivialerweise in P oder BPP vorkommt, ein "übergeordneter Grund" für die Reduktion in der Regel identifiziert werden kann --- und fast immer gehört dieser Grund zu einer Liste von einem Dutzend oder weniger "üblichen Verdächtigen" (zum Beispiel: dynamische Programmierung, lineare Algebra ...). Das brachte mich jedoch zum Nachdenken: Können wir tatsächlich eine anständige Liste solcher Gründe aufschreiben? Hier ist ein erster, unvollständiger Versuch:
(0) Mathematische Charakterisierung. Problem hat eine nicht offensichtliche "rein mathematische" Charakterisierung, die es, sobald sie bekannt ist, sofort ermöglicht, eine vollständige Suche über eine Liste von Poly (n) möglichkeiten durchzuführen. Beispiel: Graphplanarität, für die ein O (n 6 ) -Algorithmus aus Kuratowskis Theorem folgt.
(Wie "planar" weiter unten ausführt, war dies ein schlechtes Beispiel: Auch wenn Sie eine kombinatorische Charakterisierung der Planarität kennen, ist die Angabe eines Polynom-Zeit-Algorithmus immer noch nicht trivial. Lassen Sie mich hier ein besseres Beispiel ersetzen: Wie wäre es Sagen wir: "Berechnen Sie bei einer Eingabe n in Binärform, wie viele Farben benötigt werden, um eine beliebige Karte mit n Löchern auf einer Oberfläche einzufärben." Es ist nicht von vornherein offensichtlich, dass dies überhaupt berechenbar ist (oder sogar endlich!). Aber es gibt eine bekannte Formel, die die Antwort gibt, und sobald Sie die Formel kennen, ist es trivial, sie in Polynomzeit zu berechnen. In der Zwischenzeit sollte "auf ausgeschlossene Minderjährige reduziert / Robertson-Seymour-Theorie" wahrscheinlich als separater übergeordneter Grund hinzugefügt werden, warum etwas sein kann in P.)
Jedenfalls ist dies nicht die Situation, die mich am meisten interessiert.
(1) Dynamische Programmierung. Das Problem kann auf eine Weise aufgeschlüsselt werden, die eine rekursive Lösung ohne exponentielle Aufblähung ermöglicht - oft, weil die zu erfüllenden Bedingungen in einer linearen oder einer anderen einfachen Reihenfolge angeordnet sind. "Rein kombinatorisch"; Keine algebraische Struktur erforderlich. Möglicherweise handelt es sich bei der Erreichbarkeit von Graphen (und damit bei 2SAT) um Sonderfälle.
(2) Matroids. Das Problem hat eine Matroid-Struktur, die es ermöglicht, dass ein gieriger Algorithmus funktioniert. Beispiele: Matching, Minimum Spanning Tree.
(3) Lineare Algebra. Das Problem kann auf das Lösen eines linearen Systems, das Berechnen einer Determinante, das Berechnen von Eigenwerten usw. reduziert werden. Die meisten Probleme, die "wundersame Annullierungen" beinhalten, einschließlich der Probleme, die durch Valiants Matchgate-Formalismus lösbar sind, fallen wahrscheinlich auch unter den linear-algebraischen Dach.
(4) Konvexität. Das Problem kann als eine Art konvexe Optimierung ausgedrückt werden. Semidefinite Programmierung, lineare Programmierung und Nullsummenspiele sind häufige (zunehmend) Spezialfälle.
(5) Polynomidentitätsprüfung. Das Problem kann auf die Überprüfung einer Polynomidentität reduziert werden, so dass das Fundamentalsatz der Algebra zu einem effizienten randomisierten Algorithmus führt - und in einigen Fällen, wie bei der Primalität, sogar zu einem nachweisbar deterministischen Algorithmus.
(6) Markov-Kette Monte Carlo. Das Problem kann auf die Probenahme aus dem Ergebnis einer schnell mischenden Wanderung reduziert werden. (Beispiel: Zählen Sie ungefähr die perfekten Übereinstimmungen.)
(7) Euklidischer Algorithmus. GCD, fortgesetzte Fraktionen ...
Verschiedenes / Unklar, wie genau zu klassifizieren ist: Stabile Ehe, Polynom-Faktorisierung, Mitgliedschaftsproblem für Permutationsgruppen, verschiedene andere Probleme in der Zahlentheorie und Gruppentheorie, Probleme mit niedrigdimensionalen Gittern ...
Meine Frage ist: Was sind die wichtigsten Dinge, die ich ausgelassen habe?
Um klarzustellen:
Mir ist klar, dass keine Liste vollständig sein kann: Unabhängig von der Anzahl der Gründe, die Sie angeben, kann jemand ein exotisches Problem finden, das in P vorkommt, aber aus keinem dieser Gründe. Teilweise aus diesem Grund interessieren mich eher Ideen, die viele verschiedene, scheinbar nicht miteinander verbundene Probleme in P oder BPP bringen, als Ideen, die nur für ein Problem funktionieren.
Mir ist auch klar, dass es subjektiv ist, die Dinge aufzuteilen. Sollten Matroiden beispielsweise nur ein Sonderfall der dynamischen Programmierung sein? Ist die Lösbarkeit durch Tiefensuche wichtig genug, um der eigene Grund zu sein, getrennt von dynamischer Programmierung? Häufig kann dasselbe Problem auch aus mehreren Gründen in P auftreten, je nachdem, wie Sie es betrachten: Beispielsweise ist das Finden eines Haupteigenwerts in P aufgrund der linearen Algebra, aber auch, weil es sich um ein konvexes Optimierungsproblem handelt.
Kurz gesagt, ich hoffe nicht auf ein "Klassifikations-Theorem" - nur auf eine Liste, die auf sinnvolle Weise das widerspiegelt, was wir derzeit über effiziente Algorithmen wissen. Deshalb interessieren mich vor allem die Techniken, um Dinge in P oder BPP zu setzen, die eine breite Anwendbarkeit haben, aber nicht in die obige Liste passen - oder andere Ideen, um meinen groben ersten Versuch zu verbessern, meinen Ruhm gegenüber dem Guten wieder gut zu machen Physiker.