Es gibt keine einheitliche Definition für einen "schnelleren Algorithmus". Es gibt keine Kontrollinstanz, die entscheidet, ob ein Algorithmus schneller ist als ein anderer.
Um darauf hinzuweisen, warum dies so ist, möchte ich zwei verschiedene Szenarien anbieten, die dieses düstere Konzept demonstrieren.
Das erste Beispiel ist ein Algorithmus, der eine verknüpfte Liste ungeordneter Daten durchsucht. Wenn ich die gleiche Operation mit einem Array ausführen kann, hat sich an dem großen Oh-Leistungsmaß nichts geändert. Beide Suchen sind O (n). Wenn ich mir nur die großen Oh-Werte anschaue, kann ich sagen, dass ich überhaupt keine Verbesserung erzielt habe. Es ist jedoch bekannt, dass Array-Lookups in den meisten Fällen schneller sind als das Durchlaufen einer verknüpften Liste. Man kann also entscheiden, dass dies einen Algorithmus "schneller" gemacht hat, obwohl sich das große Oh nicht geändert hat.
Wenn ich das traditionelle Beispiel der Programmierung eines Roboters zur Herstellung eines PBJ-Sandwichs verwenden darf, kann ich zeigen, was ich anders meine. Betrachten Sie nur den Punkt, an dem man das Glas Erdnussbutter öffnet.
Pick up the jar
Grab the lid
Unscrew the lid
Gegen
Pick up the jar
Put the jar back down
Pick up the jar
Put the jar back down
Pick up the jar
Put the jar back down
Pick up the jar
Put the jar back down
Pick up the jar
Put the jar back down
Pick up the jar
Grab the lid
Unscrew the lid
Selbst in der akademischsten theoretischen Umgebung, die ich mir vorstellen kann, werden Sie feststellen, dass die Leute akzeptieren, dass der erste Algorithmus schneller ist als der zweite, obwohl die großen Ergebnisse der Oh-Notation gleich sind.
Im Gegensatz dazu können wir einen Algorithmus zum Unterbrechen der RSA-Verschlüsselung in Betracht ziehen. Im Moment wird angenommen, dass dieser Prozess wahrscheinlich O (2 ^ n) ist, wobei n die Anzahl der Bits ist. Stellen Sie sich einen neuen Algorithmus vor, der n ^ 100 schneller läuft. Das bedeutet, mein neuer Prozess läuft in O (2 ^ n / n ^ 100). In der Welt der Kryptographie wird eine polynomielle Beschleunigung zu einem exponentiellen Algorithmus jedoch traditionell überhaupt nicht als theoretische Beschleunigung angesehen. Bei Sicherheitsüberprüfungen wird davon ausgegangen, dass ein Angreifer möglicherweise eine dieser Beschleunigungen feststellt und diese keine Auswirkungen hat.
In einem Fall können wir also ein O (n) in ein O (n) ändern und es schneller aufrufen. Unter anderen Umständen können wir ein O (2 ^ n) in O (2 ^ n / n ^ 100) ändern und behaupten, es gäbe überhaupt keine sinnvolle Beschleunigung. Aus diesem Grund sage ich, dass es keine einheitliche Definition für einen "schnelleren Algorithmus" gibt. Es ist immer kontextabhängig.