Будь-який рейтинг різних структур даних буде принаймні частково прив'язаний до проблемного контексту. Це допоможе навчитися аналізувати часові та просторові характеристики алгоритмів. Як правило, використовується "велика нотація O", наприклад, двійковий пошук здійснюється в O (log n) час, що означає, що час пошуку елемента - це журнал (в базі 2, неявно) кількості елементів. Інтуїтивно зрозуміло, оскільки кожен крок відкидає половину решти даних як нерелевантних, подвоєння кількості елементів збільшить час на 1 крок. (Шкала бінарного пошуку досить добре.) Космічна ефективність стосується того, як збільшується об'єм пам'яті для великих наборів даних. Також зауважте, що нотація big-O ігнорує постійні фактори - для менших наборів даних алгоритм O (n ^ 2) все ще може бути швидшим, ніж алгоритм O (n * log n), який має більш високий постійний коефіцієнт.
Крім часу та простору, інші характеристики включають, чи сортується структура даних (сортуються дерева та пропускні списки, хеш-таблиці не є), стійкість (двійкові дерева можуть повторно використовувати вказівники із старих версій, тоді як хеш-таблиці змінюються на місці) тощо.
Хоча вам потрібно буде вивчити поведінку декількох структур даних, щоб мати можливість їх порівняти, один із способів розвинути розуміння того, чому вони відрізняються за ефективністю, - це уважно вивчити декілька. Я б запропонував порівняти окремо пов'язані списки, двійкові дерева пошуку та пропустити списки , всі вони відносно прості, але мають дуже різні характеристики. Подумайте, скільки роботи потрібно, щоб знайти значення, додати нове значення, знайти всі значення в порядку тощо.
Існують різні тексти аналізу алгоритмів / продуктивності структури даних, які люди рекомендують, але те, що насправді мало сенс для мене, - це вивчення OCaml. Робота зі складними структурами даних є сильною перевагою ML, і їх поведінка набагато зрозуміліше, коли ви можете уникнути покажчиків та управління пам’яттю, як у C. (Навчання OCaml просто для розуміння структур даних майже напевно довгий шлях).)