Jedes Ranking verschiedener Datenstrukturen ist zumindest teilweise an den Problemkontext gebunden. Es wäre hilfreich zu lernen, wie man die zeitliche und räumliche Leistung von Algorithmen analysiert. Typischerweise wird die "große O-Notation" verwendet, z. B. erfolgt die binäre Suche in der Zeit O (log n), was bedeutet, dass die Zeit für die Suche nach einem Element das Protokoll (implizit in Basis 2) der Anzahl der Elemente ist. Intuitiv erhöht die Verdoppelung der Anzahl der Elemente die Zeit um 1 Schritt, da bei jedem Schritt die Hälfte der verbleibenden Daten als irrelevant verworfen wird. (Die binäre Suche lässt sich recht gut skalieren.) Die Speicherleistung betrifft, wie der Speicher für größere Datenmengen wächst. Beachten Sie außerdem, dass die Big-O-Notation konstante Faktoren ignoriert. Bei kleineren Datensätzen ist ein O (n ^ 2) -Algorithmus möglicherweise immer noch schneller als ein O (n * log n) -Algorithmus mit einem höheren konstanten Faktor.
Neben Zeit und Raum gehören zu den weiteren Merkmalen, ob eine Datenstruktur sortiert ist (Bäume und Skiplisten werden sortiert, Hash-Tabellen nicht), Persistenz (Binärbäume können Zeiger aus älteren Versionen wiederverwenden, während Hash-Tabellen an Ort und Stelle geändert werden) usw.
Während Sie das Verhalten mehrerer Datenstrukturen lernen müssen, um sie vergleichen zu können, besteht eine Möglichkeit, ein Gefühl dafür zu entwickeln, warum sie sich in der Leistung unterscheiden, darin, einige genau zu untersuchen. Ich würde vorschlagen, einfach verknüpfte Listen, binäre Suchbäume und Sprunglisten zu vergleichen , die alle relativ einfach sind, aber sehr unterschiedliche Eigenschaften haben. Überlegen Sie, wie viel Arbeit erforderlich ist, um einen Wert zu finden, einen neuen Wert hinzuzufügen, alle Werte in der richtigen Reihenfolge zu finden usw.
Es gibt verschiedene Texte zur Analyse der Leistung von Algorithmen / Datenstrukturen, die von den Leuten empfohlen werden, aber was sie für mich wirklich sinnvoll machte, war das Erlernen von OCaml. Der Umgang mit komplexen Datenstrukturen ist die Stärke von ML, und ihr Verhalten ist viel klarer, wenn Sie Zeiger und Speicherverwaltung wie in C vermeiden können. (OCaml nur zu lernen, um Datenstrukturen zu verstehen, ist jedoch mit ziemlicher Sicherheit der lange Weg. :))