Versteckte Konstanten in der Komplexität von Algorithmen


9

Für viele Probleme hat der Algorithmus mit der besten asymptotischen Komplexität einen sehr großen konstanten Faktor, der durch die große O-Notation verborgen ist. Dies tritt bei der Matrixmultiplikation, der Ganzzahlmultiplikation (insbesondere dem jüngsten O (n log n) Ganzzahlmultiplikationsalgorithmus von Harvey und van der Hoeven), Sortiernetzwerken mit geringer Tiefe und der Suche nach minderjährigen Graphen auf, um nur einige zu nennen. Solche Algorithmen werden manchmal als galaktische Algorithmen bezeichnet.

Beachten Sie, dass für andere Algorithmen, wie allgemeine Sortierung und Ganzzahladdition, Algorithmen mit optimaler asymptotischer Komplexität und kleinen konstanten Faktoren bekannt sind.

Welche Untersuchungen wurden durchgeführt, um die ersteren Algorithmen aus theoretischer Sicht von den letzteren zu trennen?

Mir ist bewusst, dass versteckte Konstanten oft weggelassen werden, um die Unterscheidung zwischen verschiedenen Rechenmodellen zu verbergen. Ich bin jedoch zuversichtlich, dass diese galaktischen Algorithmen unter einer Vielzahl unterschiedlicher Modelle langsamer sein werden als beispielsweise asymptotisch schlechtere Algorithmen für Eingaben mit einer Größe von einer Milliarde. Die Unterscheidung ist in einigen Fällen nicht subtil. Wurde es rigoros gemacht?

Zum Beispiel könnte man ein sehr einfaches Berechnungsmodell erfinden, wie eine von Neumann-Maschine mit einer sehr einfachen ISA, und dann die Algorithmen implementieren und ihre Laufzeiten mit expliziten Konstanten binden. Wurde dies für eine Vielzahl von Algorithmen durchgeführt?


1
Schnelle ganzzahlige Multiplikationsalgorithmen sind nicht galaktisch. Sie werden in der Praxis häufig verwendet.
Emil Jeřábek

2
Ö(nLogn)

1
Da die Autoren selbst schreiben (und in Liptons Blog erwähnt werden), versucht das Papier der Einfachheit halber nicht, die Konstanten zu optimieren, aber sie können sehr wahrscheinlich praktisch gemacht werden.
Emil Jeřábek

@ EmilJeřábek Dieses Papier war in der Tat das, über das ich gesprochen habe. Das Papier beschreibt Verbesserungen, die vorgenommen werden könnten, aber es ist äußerst zweifelhaft, dass der Algorithmus, wie er ist, jemals eine praktische Verbesserung gegenüber aktuellen O (n log n log log n) -Algorithmen darstellen wird, die in der Praxis verwendet werden, wenn man bedenkt, wie klein log log n ist ist für praktische Eingaben.
isaacg

4
2d12d=1729d=92912

Antworten:


2

N.C.N.

Die Methodik erfordert keine Festlegung eines bestimmten Berechnungsmodells, obwohl dies natürlich nützlich sein könnte. Beachten Sie auch, dass Sie entweder versuchen können, das Worst-Case-Verhalten oder das erwartete Verhalten zu berechnen, oder noch etwas anderes.

Der wichtigste Bestandteil dieser Methodik ist die Analyse der Erzeugungsfunktionen dieser Werte. Mit Methoden aus der komplexen Analyse können Sie manchmal sehr genaue asymptotische Näherungen erhalten.

Ö(nLogn)

Tatsächlich sortieren Sie in Quicksort eine Liste, indem Sie Unterlisten rekursiv sortieren, sodass Sie eine Verbesserung für alle Größen erzielen, wenn Sie Mergesort für Listen verwenden, die kleiner als Größe 10 sind. Ein interessanter Hinweis im Buch erwähnt, dass in einigen Open-Source-Microsoft-Bibliotheken Der generische Sortieralgorithmus wird als Quicksort implementiert, bis Sie eine Größe von 10 erreicht haben. Danach wird Mergesort verwendet. In den Codekommentaren wird erwähnt, dass Leistungstests gezeigt haben, dass dieser Wert optimal ist.

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.