Ich versuche, eine Liste von Algorithmen / Problemen zu erstellen, die "außergewöhnlich nützlich" sind, wie zum Beispiel das Lösen von Problemen, die von Natur aus sehr exponentiell erscheinen, aber einige besonders clevere Algorithmen haben, die sie letztendlich lösen. Beispiele für das, was ich meine:
- Lineare Programmierung (Der Simplex-Algorithmus ist eine Exponentialzeit; es hat lange gedauert, bis eine Lösung für die Polynomzeit gefunden wurde!)
- Allgemeiner gesagt, Semidefinite Programming
- Primalitätstests
- 2-SAT und HORNSAT
- Determinanten berechnen (wenn dies nicht schwierig klingt, betrachten Sie die permanente)
- Perfekte Übereinstimmungen finden
- Eine Vielzahl von gruppentheoretischen Problemen, die mit der Klassifikation endlicher einfacher Gruppen gelöst werden können
- Eine Vielzahl schwieriger Graphprobleme, die mit komplizierten Forbidden Minor-Charakterisierungen gelöst werden können (Einbettbarkeit auf einer beliebigen Oberfläche; Begrenzung von Baumbreite und Verzweigungsbreite; reduzierbare Delta-Wye-Graphen)
- Berechnen von Exponentialen in einer begrenzten Gruppe (dh Berechnen von in Schritten, wie durch wiederholtes Quadrieren erreicht)
- Berechnungen, die auf dem LLL-Algorithmus beruhen. (Als Sonderfall: Euklidischer Algorithmus. Als allgemeinerer Fall: PSLQ- oder HJLS-Algorithmus.)
- Einschränkungsprobleme ohne Taylor-Terme (?). Ich gebe zu, dass ich das nicht ganz verstehe, aber es hört sich so an, als würde es die obigen 2-SAT / HORNSAT-Fälle und jegliche lineare Algebra über endliche Felder subsumieren. Siehe hier für einen längeren Beitrag
- Probleme berechenbar über holographische Reduktionen .
Als lobende Erwähnung möchte ich auch den Graphisomorphismus erwähnen, da er immer noch furchtbar einfach ist ( ) und so vielen anderen Isomorphismusproblemen entspricht:
- Digraphen / Multigraphen / Hypergraphen (eine Art "schwierigeres" Problem)
- Endliche Automaten / CFGs
Offensichtlich gibt es eine Reihe von Schwierigkeiten, aber alle lassen zumindest einige Menschen mit einem gewissen Gefühl der "Überraschung" zurück, in dem Sinne, dass das Problem schwierig klingen kann, sich aber als lösbar herausstellt. LP klingt vielleicht relativ unkompliziert, aber es hat einige Zeit gedauert, bis eine Lösung dafür gefunden wurde. Das wiederholte Quadrieren oder Lösen von 2-SAT ist etwas, das sich ein Student möglicherweise selbst einfallen lassen könnte. Wenn Sie jedoch nur von NP-Complete-Problemen erfahren hätten, ohne HORNSAT gesehen zu haben, könnte dies wie ein natürlicher Kandidat für die NP-Vollständigkeit klingen. Das Lösen des CFSG oder die polynomische Überprüfung der Delta-Wye-Reduzierbarkeit sind keine Kleinigkeiten.
Ich hoffe das macht Sinn; Hier gibt es natürlich viele subjektive Attribute, aber ich bin gespannt, was andere Leute für effiziente Lösungen für "offensichtlich schwierige" Probleme halten.
quelle
Antworten:
Für mich ist einer der effizientesten Algorithmen der Blossom V-Algorithmus, der die perfekte Übereinstimmung des Maximalgewichts in einem allgemeinen Diagramm findet:
https://en.m.wikipedia.org/wiki/Blossom_algorithm
quelle
Für mich sind alle klassischen und die neueren effizienteren Algorithmen zum Verifizieren oder Auffinden eines Minimum Spanning Tree (MST) eines verbundenen kantengewichteten Graphen gute Kandidaten. Viele dieser Algorithmen sind in Wikipedia aufgeführt .
Auf den ersten Blick sieht dieses Problem wie das Problem des Handlungsreisenden aus, eines der wenigen bekanntesten NP-harten Probleme. Am erstaunlichsten ist, dass es lineare Algorithmen gibt, mit denen ein MST verifiziert werden kann, und viele nahezu lineare Algorithmen, mit denen ein MST gefunden werden kann! Tatsächlich ist eines der bekanntesten offenen Probleme bei Algorithmen, ob es einen deterministischen linearen Algorithmus gibt, um eine MST in allgemeinen Graphen zu finden. Es stellt sich heraus, dass es eine Fülle von mathematischen und graphischen Strukturen und Eigenschaften sowie eine Vielzahl praktischer Anwendungen gibt, die mit MST verbunden sind, was es zu einem der unterhaltsamsten und erweiterbarsten Themen im Informatikkurs macht. Eine leicht veraltete, aber sehr gut geschriebene umfassende Einführung finden Sie im Tutorial von Jason Eisner .
quelle