Während andere Antworten gute Punkte liefern, habe ich das Gefühl, dass ich immer noch ein bisschen anderer Meinung bin. Also werde ich meine eigenen Gedanken zu diesem Punkt teilen.
Kurz gesagt, ich denke, die Konstante „wie sie ist“ zu zeigen, ist bestenfalls eine verpasste Gelegenheit. Vielleicht ist es das Beste, was wir derzeit bekommen können, aber es ist alles andere als ideal.
Aber zunächst halte ich einen kurzen Ausflug für notwendig.
Wann haben wir einen effektiven Algorithmus?
106
- P von (ziemlich großen) Primzahlen.
- Berechnen P2Die Menge aller Komposite mit genau zwei Faktoren aus P. Speichern Sie für jedes Komposit, mit welchem Primzahlenpaar es erstellt wird.
- Nun, wenn eine Instanz von gegeben P2Schauen Sie sich einfach die Faktorisierung in unserer Tabelle an und geben Sie sie an. Andernfalls melden Sie "Fehler".
Ich hoffe, es ist offensichtlich, dass dieser Algorithmus Müll ist, da er nur dann richtig funktioniert, wenn unsere Eingabe in ist P2. Können wir dies jedoch sehen, wenn der Algorithmus als Blackbox angegeben und "zufällig" nur mit Eingaben von getestet wirdP? Sicher, wir können versuchen, viele Beispiele zu testen, aber es ist sehr einfach zu machenP sehr groß, ohne dass der Algorithmus bei Eingaben von unwirksam ist P2 (Vielleicht möchten wir eine Hash-Map oder so etwas verwenden).
Es ist also nicht unvernünftig, dass unser Müllalgorithmus zufällig "wundersame" Beschleunigungen zu haben scheint. Nun gibt es natürlich viele Techniken zur Versuchsplanung, mit denen das Risiko gemindert werden kann, aber vielleicht cleverere 'schnelle' Algorithmen, die in vielen Fällen immer noch versagen, aber nicht genügend Beispiele können uns täuschen! (Beachten Sie auch, dass ich annehme, dass kein Forscher böswillig ist , was die Sache noch schlimmer macht!)
Daher würde ich jetzt antworten: "Weck mich auf, wenn es eine bessere Leistungsmetrik gibt".
Wie können wir es dann besser machen?
Wenn wir es uns leisten können, unseren "Black-Box" -Algorithmus in allen Fällen zu testen, können wir uns von den obigen Ausführungen nicht täuschen lassen. Dies ist jedoch für praktische Situationen unmöglich. (Dies kann in theoretischen Modellen durchgeführt werden!)
Stattdessen können wir eine statistische Hypothese für eine bestimmte parametrisierte Laufzeit (normalerweise für die Eingabegröße) erstellen , um dies zu testen. Vielleicht können wir unsere Hypothese anpassen und erneut testen, bis wir eine Hypothese erhalten, die uns gefällt und die Null als vernünftig erscheint. (Beachten Sie, dass es wahrscheinlich andere Faktoren gibt, die ich ignoriere. Ich bin praktisch ein Mathematiker. Die Versuchsplanung entspricht nicht meinem Fachwissen.)
Der Vorteil des statistischen Testens einer Parametrisierung (zB ist unser Algorithmus) O ( n3)? ) ist, dass das Modell allgemeiner ist und es daher schwieriger ist, wie im vorherigen Abschnitt "betrogen" zu werden. Es ist nicht unmöglich, aber zumindest die statistischen Behauptungen, ob dies angemessen ist, können gerechtfertigt werden.
Was tun mit den Konstanten?
Ich denke nur, dass "109 "speedup, wow!" ist eine schlechte Methode, um diesen Fall zu lösen.
Ich denke, es ist am nützlichsten, die merkwürdige Konstante als eine Anomalie zu betrachten , dh es ist eine Behauptung, die an sich eine weitere Untersuchung rechtfertigt. Ich denke, dass das Erstellen von Hypothesen, die auf allgemeineren Modellen basieren, als nur „unser Algorithmus benötigt X-Zeit“, ein gutes Werkzeug ist, um dies zu tun. Obwohl ich nicht denke, dass wir hier einfach CS-Konventionen übernehmen können, ist es auch eine schlechte Idee, die „Verachtung“ von Konstanten völlig zu ignorieren.