Wir nennen einen Algorithmus im Allgemeinen "guten Algorithmus", wenn seine Laufzeit im schlimmsten Fall polynomisch ist. In einigen Fällen (z. B. Simplex-Algorithmus) kann der Worst-Case des Algorithmus zwar exponentiell sein, in der Praxis jedoch sehr gut funktionieren.
Gibt es andere (deterministische) Beispiele für diese Situation als den Simplex-Algorithmus?
ds.algorithms
Arman
quelle
quelle
Antworten:
Moderne SAT-Lösungsalgorithmen können die meisten Instanzen recht schnell lösen, obwohl die Laufzeit im ungünstigsten Fall natürlich exponentiell ist. In diesem Fall ist die praktische Geschwindigkeit jedoch eher ein Ergebnis jahrelanger Algorithmusentwicklung als die eines einzelnen eleganten Algorithmus. Während ich verstanden habe, dass konfliktgesteuertes Klausellernen einen großen Leistungssprung bei SAT-Lösern verursachte, wurden die späteren Verbesserungen oft durch den geschickten Einsatz verschiedener Heuristiken in den Algorithmen erreicht.
quelle
quelle
Die Inferenz vom Hindley-Milner-Typ ist EXPTIME-vollständig, aber in den Programmen, die normalerweise geschrieben werden, ist sie ziemlich linear.
quelle
let z = (let y = e in e') in e''
im Gegensatz zu alslet y = e in let z = e' in e''
.Brendan McKays Nauty - Programm (No AUTomorphisms, Yes?) Löst das kanonische Beschriftungsproblem von Graphen (gleichzeitige Lösung der Probleme mit Graph Isomorphism und Graph Automorphism) und weist eine exponentielle Worst-Case-Leistung auf (Miyazaki, 1996). Es funktioniert jedoch sehr schnell für die meisten Grafiken, insbesondere für solche mit einigen Automorphismen.
Insbesondere beginnt der Algorithmus mit der Aufteilung der Eckpunkte nach Grad und dann nach Grad zwischen den einzelnen Teilen. Wenn sich dieser Prozess stabilisiert, muss eine Auswahl getroffen werden, um einen Scheitelpunkt in einem nicht trivialen Teil zu unterscheiden, und dies führt zu einem exponentiellen Verhalten. In den meisten Diagrammen ist die Tiefe dieses Verzweigungsvorgangs gering.
quelle
Einige Algorithmen für einfache stochastische Spiele funktionieren in der Praxis gut, obwohl sie exponentielle Worst-Case-Laufzeiten haben. Natürlich hängt dieses Problem in gewissem Sinne mit der linearen Programmierung zusammen, obwohl nicht bekannt ist, dass es sich um eine Polynomzeit handelt.
quelle
Es gibt einen Algorithmus zum Auffinden gemischter Nash-Gleichgewichte, der dem Simplex-Algorithmus für LPs ähnelt. (Ich vergesse den Namen.) Es hat eine exponentielle Worst-Case-Komplexität, aber ich habe ein vages Gedächtnis, dass es sich in der Praxis oft gut verhält.
quelle
Das Verpacken von Behältern (viele Varianten) ist ein Problem, dessen Komplexität als NP-hart bekannt ist:
http://en.wikipedia.org/wiki/Bin_packing_problem
Viele Heuristiken, wenn sie auf "praktische" Versionen angewendet werden, sind jedoch sehr gut. Für das eindimensionale Verpacken von Behältern werden einige dieser Heuristiken wie die Erstanpassung verwendet. First-Fit abnehmend; beste Passform; Best-Fit-Abnahmen sind als Themen, die den Schülern gezeigt werden sollen, sehr ansprechend. Die Schüler können oft einige der grundlegenden Heuristiken für sich selbst entdecken.
quelle
Der Persistenzalgorithmus (ursprünglich von Edelsbrunner-Letscher-Zomorodian, mit vielen Variationen seitdem) ist im schlimmsten Fall kubisch, scheint jedoch vom Experimentieren normalerweise in linearer Zeit zu laufen.
quelle