Irgendwann wartet ein Lehrbuch mit dem Arbeitstitel Datenstrukturen, Algorithmen und Kompromisse auf Sie . Nahezu jeder Algorithmus oder jede Datenstruktur, die Sie wahrscheinlich im Grundstudium lernen, verfügt über einige Funktionen, die es für einige Anwendungen besser machen als für andere.
Nehmen wir als Beispiel das Sortieren, da jeder mit den Standardsortieralgorithmen vertraut ist.
Zunächst einmal ist Komplexität nicht das einzige Problem. In der Praxis spielen konstante Faktoren eine Rolle, weshalb (sagen wir) die schnelle Sortierung in der Regel häufiger verwendet wird als die Heap-Sortierung, obwohl die schnelle Sortierung im schlimmsten Fall eine schreckliche Komplexität aufweist.
O ( n logn )
In anderen Fällen können Ideen aus einem Algorithmus oder einer Datenstruktur auf ein spezielles Problem angewendet werden. Die Blasensortierung scheint auf echter Hardware immer langsamer zu sein als die Einfügungssortierung, aber die Idee, einen Blasendurchlauf durchzuführen, ist manchmal genau das, was Sie brauchen.
Betrachten Sie beispielsweise eine Art 3D-Visualisierung oder ein Videospiel auf einer modernen Grafikkarte, bei der Sie Objekte aus Leistungsgründen in der Reihenfolge von der nächsten zur Kamera bis zur entferntesten zur Kamera zeichnen möchten Wenn Sie die genaue Bestellung nicht erhalten, kümmert sich die Hardware darum. Wenn Sie sich in der 3D-Umgebung bewegen, ändert sich die relative Reihenfolge der Objekte zwischen den Bildern nicht wesentlich. Daher kann es sinnvoll sein, für jedes Bild einen Bubble-Pass durchzuführen. (Die Source-Engine von Valve bewirkt dies für Partikeleffekte.)
Es gibt Persistenz, Parallelität, Cache-Lokalität, Skalierbarkeit auf einem Cluster / einer Cloud und eine Vielzahl anderer möglicher Gründe, warum eine Datenstruktur oder ein Algorithmus besser geeignet sein kann als ein anderer, selbst wenn Sie für die von Ihnen gewünschten Vorgänge dieselbe Komplexität in der Berechnung haben.
Dies bedeutet jedoch nicht, dass Sie sich für alle Fälle eine Reihe von Algorithmen und Datenstrukturen merken sollten. Der größte Teil des Kampfes besteht darin zu erkennen, dass es einen Kompromiss gibt, der ausgenutzt werden muss, und zu wissen, wo man suchen muss, wenn man denkt, dass etwas angemessen ist.