Welche Modelle der Laufzeit des Algorithmus existieren?Wie modelliert man die Ausführungszeit von Algorithmen?
Wir erwarten alle Mergesort schneller als bublesort, und beachten Sie, dass mergesort macht O (n Log n) Vergleiche vs O (n) für bubblesort.
Für andere Algorithmen, zählen andere Operationen (als vergleicht und Swaps), wie Pointer-Dereference, Array-Lookup, Arithmetik auf fester Größe ganzer Zahlen usw.
Welche anderen Möglichkeiten, die Ausführungszeit zu modellieren sind ?
Einer, den ich kenne, zählt die Anzahl der gelesenen und auf die Platte geschriebenen Blöcke; Eine ausführliche Beschreibung finden Sie in meiner Antwort auf When does Big-O notation fail?.
Ein anderer zählt die Anzahl der Cache-Misses. Dies erweitert das E/A-Modell, indem alle Ebenen der Speicherhierarchie betrachtet werden.
Ein drittes, für verteilte Algorithmen (z. B. in sichere Multiparty-Berechnung) ist die Menge der über das Netzwerk übertragenen Daten (häufig gemessen in Runden oder Anzahl der Nachrichten) zu zählen.
Welche anderen interessanten Dinge gibt es zu zählen (und nicht zählen!), Um die Leistung eines Algorithmus vorherzusagen?
Auch, Wie gut sind diese Modelle? Soweit ich gehört habe, sind Cache-Oblivious-Algorithmen konkurrenzfähig mit I/O-effizienten Algorithmen für Daten auf der Festplatte, aber nicht für In-Memory-Algorithmen.
Insbesondere: In welchen spezifischen Fällen verfälschen diese Modelle die relative Leistung? Nach meinen eigenen Experimenten beschleunigen Fibonacci-Heaps den kürzesten Pfad von Dijstra nicht (im Gegensatz zu binären Heaps), wenn die Daten klein genug sind, um in den Speicher zu passen.
"Welche anderen interessanten Dinge gibt es zu zählen ..." ist das nicht die eigentliche Frage? Vielleicht den Titel anpassen? –
Interessanter Thread, aber nicht auf den Punkt. – ralphtheninja
Wohlgemerkt, +1 für die Formatierung des Quadrats auf O (n2) richtig: P –