Wenn die Laufzeit eines Algorithmus ein komplizierter Ausdruck ist, ist der Algorithmus selbst sehr oft auch kompliziert und unpraktisch. Jeder der Kubikwurzel- und -Faktoren in der asymptotischen Laufzeit führt dazu, dass der Algorithmus komplexer wird und die Laufzeit konstant bleibt.
Haben wir eindrucksvolle Beispiele, bei denen diese Faustregel versagt?
Es ist natürlich leicht, Beispiele für Algorithmen zu finden , die sehr schwierig zu implementieren sind, obwohl sie eine sehr einfache Worst-Case-Laufzeit haben. Aber was ist mit der Umkehrung?
Haben wir Beispiele sehr einfacher und praktischer deterministischer Algorithmen, die einfach zu implementieren sind, jedoch einen sehr komplizierten Ausdruck als asymptotische Laufzeit im ungünstigsten Fall haben?
Bitte beachten Sie die Schlüsselwörter "deterministisch" und "Worst-Case"; Die Analyse einfacher randomisierter Algorithmen führt ziemlich leicht zu komplizierten Ausdrücken.
Was "kompliziert" ist, ist natürlich Geschmackssache. Wie auch immer, ich würde es vorziehen, einen Ausdruck zu sehen, der viel zu hässlich ist, um ihn in den Titel Ihrer Arbeit zu schreiben. Und ich würde eine komplizierte Funktion eines natürlichen Parameters (Eingabegröße, Anzahl der Knoten usw.) vorziehen .
PS. Ich dachte, ich würde das nicht zu einer "Big-List-Frage" machen und nicht zu CW. Ich würde gerne ein einziges hervorragendes Beispiel finden (falls es überhaupt existiert). Schreiben Sie daher eine andere Antwort nur, wenn Sie der Meinung sind, dass sie "besser" ist als alle bisherigen Antworten.
quelle
Antworten:
Das beste Beispiel, das ich mir vorstellen kann, ist ein Algorithmus (im Folgenden beschrieben) zur Berechnung des Pegels in einer Anordnung von n Linien in der Ebene, dh der polygonalen Linie, die durch die Punkte gebildet wird, über denen sich genau k Linien vertikal befinden. Dies ist nicht der effizienteste Algorithmus, der für das Problem bekannt ist. Es gibt effizientere Algorithmen mit einfacheren Komplexitäten, aber ich glaube, dieser Algorithmus ist praktischer als die meisten (wenn nicht alle). Die Analyse ist wahrscheinlich nicht eng, weil sie die Komplexität auf k- Ebene verwendet, was ein bekanntes offenes Problem ist (ich denke, alle anderen Begriffe in der Analyse sind eng). Trotzdem bezweifle ich, dass verbesserte Grenzen für k- Level die Laufzeit viel einfacher machen würden. Ich gehe von k = ausk n k k k , um die Komplexität als Funktion von n alleinezu schreiben.k = n / 2 n
Der Algorithmus basiert auf dem Line-Sweep-Paradigma und verwendet zwei -äre kinetische Turniere als kinetische Prioritätswarteschlangen. Einfügungen und Löschungen werden ausgeführt, wenn eine Linie über oder unter dem k- Level liegt und eine Linie von einem kinetischen Turnier zum anderen verschoben wird. Daher gibt es O ( N 4 / 3 ) , Einfügungen und Löschungen (die Dey Schranke für die Verwendung von k -Niveau Komplexität). Jedes Ereignis wird in verarbeitet O ( log n ) Zeit und es gibt O ( N 4 / 3 α ( n( logn ) k O ( n4 / 3) k O ( logn ) Ereignisse (das α ( n ) ergibt sich aus der Komplexität der oberen Hüllkurve von Anordnungen von Liniensegmenten, während das log n / log log n aus der Höhe eines ( log n ) -Baums stammt ). Die Gesamtlaufzeit beträgtO ( n4 / 3α(n)logn/loglogn) α(n) logn/loglogn (logn)
Weitere Informationen und Referenzen finden Sie im Manuskript von Timothy Chan unter http://www.cs.uwaterloo.ca/~tmchan/lev2d_7_7_99.ps.gz . Der log n Faktor kann durch ein binäres (intead of ( log n ) -ary) kinetisches Turnier entfernt werden, beschleunigt jedoch die kinetische Prioritätswarteschlange in den von mir durchgeführten Tests. Die Komplexität sollte etwas hässlicher und schlimmer werden (während der Algorithmus noch praktikabel sein wird), wenn ein kinetischer Heap anstelle eines kinetischen Turniers verwendet wird (ein Protokoll innerhalb einer Quadratwurzel sollte angezeigt werden).1/loglogn (logn) log
quelle
Die Datenstrukturoperationen von union-find scheinen Ihren Kriterien zu entsprechen:
http://en.wikipedia.org/wiki/Disjoint-set_data_structure
quelle
Simplex-Algorithmus. Einfach zu implementieren und funktioniert wunderbar in der Praxis, ist aber ein Chaos theoretisch zu analysieren.
quelle
Ich bin mir nicht sicher, ob Sie dies für "praktisch" halten, aber es ist ein bekanntes offenes Problem. Paul Erdos sagte über Collatz Vermutung: "Mathematik ist noch nicht bereit für solche Probleme"
quelle
Dieses Beispiel kann von Interesse sein, auch wenn es dem Brief Ihrer Anfrage nicht entspricht, da es eine gewisse spirituelle Verwandtschaft aufweist. Insbesondere die Frage der Sortierung von Pfannkuchenstapeln und gebrannten Pfannkuchen nach Umkehrungen.
http://en.wikipedia.org/wiki/Pancake_sorting
Ein Anwendungsgebiet ist die Computational Biology (Genetics), in der Fragen zur Umlagerung von Genomen in Bezug auf den Abstand zwischen Permutationen durch Umkehrung von Teilen der Permutationen nach verschiedenen Regeln formuliert werden können.
quelle