Leistungsstarke Algorithmen, deren Implementierung zu komplex ist


67

Was sind Algorithmen von legitimem Nutzen, die einfach zu komplex sind, um sie zu implementieren?

Lassen Sie mich klar sein: Ich suche nicht nach Algorithmen wie dem aktuellen asymptotischen optimalen Matrixmultiplikationsalgorithmus (Coppersmith-Winograd), der sinnvoll zu implementieren ist, aber eine Konstante hat, die es in der Praxis unbrauchbar macht. Ich bin auf der Suche nach Algorithmen, die plausibel einen praktischen Wert haben könnten, die aber so schwer zu codieren sind, dass sie nie implementiert wurden, nur in extrem künstlichen Umgebungen oder nur für bemerkenswert spezielle Anwendungen implementiert wurden.

Ebenfalls willkommen sind nahezu unmöglich zu implementierende Algorithmen, die eine gute Asymptotik aufweisen, aber wahrscheinlich eine schlechte reale Leistung aufweisen.


1
Dies CW zu machen, da es eine lange Liste sein könnte.
Suresh Venkat

4
Gibt es eine Metrik für "fast unmöglich zu implementieren"? Gibt es eine Theorie, die das definiert?
Ritwik Bose

@Mechko, möglicherweise eine Untergrenze für die Größe der kleinsten Turing-Maschine, die eine Beschreibung einer Turing-Maschine ausgibt, bei der es sich um eine Implementierung des Algorithmus handelt. :)
Radu GRIGore

@Radu GRIGore Ist dies eine akzeptierte Metrik oder eine, die entwickelt werden sollte? Ich nehme an, dass es (für den Moment) eine einfache, unbewegliche Linie gibt, die "meh, not worth it" definiert ...: D
Ritwik Bose

4
Der Vorschlag, Coppersmith-Winograd sinnvoll umzusetzen, interessiert mich. Hat jemand jemals eine Implementierung gesehen, die sogar in Pseudocode auf hoher Ebene niedergeschrieben wurde, und hat jemand jemals die Konstanten geschätzt?
Raphael

Antworten:


33

Chazelle gab einen linearen Zeitalgorithmus zur Triangulation eines einfachen Polygons an . Skiena schrieb (S.575, Algorithm Design Manual), dass es "genug hoffnungslos ist, um zu implementieren, dass es mehr als Existenzbeweis qualifiziert".


3
Hat der Algorithmus sinnvolle Konstanten?
Jbapple

Ist dies der einzige bekannte lineare Zeitalgorithmus für das Problem?
Thomas Ahle

2
@ThomasAhle Ich glaube, es ist der einzige bekannte deterministische lineare Zeitalgorithmus. Amato, Goodrich und Ramos haben eine einfachere zufällige: cs.princeton.edu/courses/archive/fall05/cos528/handouts/…
Sasho Nikolov

Meines Wissens nach wurde Chazelles einfacher Polygon-Triangulationsalgorithmus mit linearer Zeit nie implementiert und wird es wahrscheinlich nie sein, weil er komplex ist und auch weil die Konstanten hoch sind, sodass er in der Praxis nicht mit Alternativen konkurrieren kann. Große theoretische Errungenschaft. Ralph Boland
Ralph Boland

Ich werde noch einmal fragen: Hat der Algorithmus vernünftige Konstanten?
user1271772

29

Der Risch-Algorithmus zur Berechnung elementarer Antiderivate. Laut Wikipedia ist aufgrund seiner Komplexität kein Softwarepaket bekannt, das den vollständigen Algorithmus implementiert.


3
Wikipedia weist auch darauf hin, dass dies kein Algorithmus, sondern ein Halbalgorithmus ist, da für die Lösung des ständigen Problems Heuristiken erforderlich sind.
sclv

Was ist Heuristik? Können Sie einen Link geben, um mehr darüber zu lesen?
Zygimantus

22

Jeder Algorithmus, der die Robertson-Seymour-Ergebnisse verwendet, um einen "Polytime" -Algorithmus für Dinge abzuleiten, die Graphen beinhalten, die einen festen Nebeneffekt ausschließen, ist problematisch. Die in ihrem Ergebnis verborgene Konstante ist "galaktisch".


3
Ist das auch schwer zu implementieren oder hat es nur eine riesige Konstante?
Lev Reyzin

5
Ja, das sieht nicht nach einem guten Beispiel aus. Wenn ich das richtig verstehe, geht es um Algorithmen, die praktisch sein könnten (daher wahrscheinlich "kleine" Konstanten), aber für die Implementierung einfach zu komplex sind. Natürlich ist die ganze Frage offen für verschiedene Interpretationen :-)
Aryabhata

5
Das Problem ist, dass die Konstante aus der sehr großen Liste der Minderjährigen stammt, die für eine bestimmte Eigenschaft ausgeschlossen werden müssen. Ich kenne keine Möglichkeit, die gewünschte Liste ausgeschlossener Minderjähriger für eine bestimmte Eigenschaft zu generieren, daher handelt es sich nicht nur um ein Skalenproblem.
Suresh Venkat

2
Zum Beispiel kennen wir nicht einmal die Liste der ausgeschlossenen Minderjährigen für Diagramme, die in den Torus eingebettet werden können.
Derrick Stolee

17
Das Problem hier scheint tiefer zu liegen: Es gibt keinen effektiven Weg, um die Liste der Minderjährigen zu generieren, daher liefert dies überhaupt keinen Algorithmus. Die meisten Minor-Closed-Eigenschaften ergeben eine unendliche Liste ausgeschlossener Minderjähriger, wenn man den logischen Ausdruck direkt übersetzt. Das Robertson-Seymour-Theorem (Wagners Vermutung) sagt uns, dass eine endliche Liste ausgeschlossener Minderjähriger in dieser unendlichen Liste lauert, aber das Theorem gibt absolut keine Hilfe, um sie tatsächlich zu finden. Also führt Robertson-Seymour meist zu einem reinen Existenzbeweis.
András Salamon

16

O(n)O(log2nB)B

Das Papier ist 55 Seiten lang und enthält einige Verbesserungen der Konstanten, die der Autor aus Platzgründen nicht beschreibt. Dies lässt mich vermuten, dass die Konstanten möglicherweise nicht so galaktisch sind und dass diese Datenstruktur von "legitimem Nutzen" wäre, zumal sie oft zitiert wurde.


12

Der Linear Time Pattern Unification Algorithmus höherer Ordnung von Qian wurde aufgrund seiner Komplexität AFAIK nie implementiert.


Zum Glück gibt es dafür noch praktische Algorithmen. Das Handbuch des automatisierten Denkens besagt, dass es in polytime durchgeführt werden kann (direkt neben der Stelle, an der der Qian-Algorithmus zitiert wird).
Jake

11

Linearzeitalgorithmus zur Überprüfung, ob ein Diagramm in eine feste Oberfläche eingebettet werden kann.

Ken-ichi Kawarabayashi, Bruce A. Reed, Bojan Mohar: Ein einfacherer linearer Zeitalgorithmus zum Einbetten von Graphen in eine beliebige Oberfläche und die Gattung der Graphen mit begrenzter Baumbreite. FOCS 2008: 771 & ndash; 780.

Bojan Mohar: Ein linearer Zeitalgorithmus zum Einbetten von Graphen in eine beliebige Oberfläche. SIAM J. Discrete Math. 12 (1): 6-26 (1999)


1
Aufgrund der großen exponentiellen (sic) Abhängigkeit von der Gattung ist es unwahrscheinlich, dass dies einen praktischen Wert hat, selbst wenn es implementiert wird.
Jeffs

8

Ich bin mir nicht sicher, wie nützlich es in der Praxis sein könnte (obwohl ich über Proteinfaltung und -vergleich sowie über die Vorhersage der RNA-Sekundärstruktur nachdenke), aber Wolfgang Haken gab den ersten Algorithmus zur Bestimmung der Polynomzeit an, um zu entscheiden, ob ein Knoten ein Knoten ist einfache Schleife ( Theorie der Normalflächen. Acta Math. 105, 1961, S. 245–375). Soweit ich mich erinnere, ist es immer noch zu kompliziert, um in all den Jahrzehnten später implementiert zu werden.

Wenn man an Wikipedia glauben will, wurden später mehrere andere Algorithmen angegeben, und "Die Komplexität dieser Algorithmen zu verstehen, ist ein aktives Forschungsgebiet."


4
Haken gab den ersten Algorithmus an, der jedoch nicht in Polynomialzeit abläuft. Tatsächlich ist kein Poly-Time-Algorithmus (oder NP-Härte-Ergebnis) bekannt. Neuere Arbeiten haben die Knoten-Trivialität (über Hakens normale Oberflächenformulierung) auf die ganzzahlige Programmierung reduziert, die in der Praxis normalerweise schnell zu lösen ist.
Jeffs

3

Baumzerfall und vielleicht Fibonacci-Haufen .


14
Fibonacci-Haufen sind sicherlich nicht zu kompliziert zu implementieren; Sie wurden implementiert und getestet. Das Problem bei ihnen ist vielmehr, dass ihre praktische Leistung aufgrund größerer konstanter Faktoren in ihrer Laufzeit nicht so gut ist wie bei einigen anderen Haufen.
David Eppstein

1
Ich habe ein Paket geschrieben, um die Baumzerlegung
Yaroslav Bulatov

2
Mein Code ist nur eine heuristische Baumzerlegung, nicht optimal wie verzweigte und dynamische Programmieransätze ... Ich vermute, Sie meinten Bodlaenders "A Linear Time Algorithm ..."? Ich habe keine Implementierungen davon gesehen
Jaroslaw Bulatow

4
2O(k3)O(n)

3
Ich denke, dies ist der beste Implementierungsaufwand: hein.roehrig.name/dipl
Diego de Estrada

1

Die perfekte Hash-Konstruktion ( https://en.wikipedia.org/wiki/Perfect_hash_function#Construction ) würde für jeden Anwendungsfall mit statischen oder sich selten ändernden Schlüsseln gelten (z. B. Domänennamen der obersten Ebene auf Routern, Stichwörter in Compilern oder Funktionsnamen) in Standardbibliotheken), aber als ich das letzte Mal nachgeschaut habe, konnte ich keine Implementierungen finden.

Die parametrische Suche kann viele schwierige Optimierungsprobleme lösen, einschließlich einiger Probleme, die in polynomialer Zeit NP-hart sein sollten. Die bekannte Veröffentlichung Parametric Search, die in der Praxis umgesetzt wurde, implementiert eine Variante der parametrischen Suche, aber ich glaube immer noch nicht, dass sie in der Praxis implementiert wurde.

knO(nlogn+k)O((n+k)logn)


1
Ich weigere mich zu glauben, dass die FKS-Konstruktion zu komplex ist, um sie zu implementieren. Es ist eigentlich ganz einfach. Vielleicht nicht praktisch, aber sicherlich nicht zu komplex umzusetzen.
Sasho Nikolov
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.