Qualsiasi classificazione di varie strutture di dati sarà almeno parzialmente legata al contesto del problema. Sarebbe utile imparare come analizzare le prestazioni nel tempo e nello spazio degli algoritmi. Tipicamente, viene utilizzata la "notazione O grande", ad esempio la ricerca binaria è nel tempo O (log n), il che significa che il tempo per cercare un elemento è il logaritmo (in base 2, implicitamente) del numero di elementi. Intuitivamente, poiché ogni passaggio scarta metà dei dati rimanenti come irrilevante, raddoppiando il numero di elementi si aumenta il tempo di 1 passaggio. (La ricerca binaria viene scalata piuttosto bene.) Le prestazioni dello spazio riguardano il modo in cui la quantità di memoria aumenta per set di dati più grandi. Inoltre, si noti che la notazione O grande ignora i fattori costanti: per set di dati più piccoli, un algoritmo O (n ^ 2) potrebbe essere ancora più veloce di un algoritmo O (n * log n) che ha un fattore costante più alto.
Oltre al tempo e allo spazio, altre caratteristiche includono se una struttura dati è ordinata (alberi e liste skip sono ordinati, tabelle hash non lo sono), persistenza (alberi binari possono riutilizzare i puntatori di versioni precedenti, mentre le tabelle hash vengono modificate sul posto), ecc.
Sebbene sia necessario imparare il comportamento di diverse strutture di dati per poterle confrontare, un modo per sviluppare un'idea del perché differiscono nelle prestazioni è studiarne da vicino alcune. Suggerirei di confrontare elenchi collegati singolarmente, alberi di ricerca binari e elenchi di salto , tutti relativamente semplici, ma con caratteristiche molto diverse. Pensa a quanto lavoro ci vuole per trovare un valore, aggiungere un nuovo valore, trovare tutti i valori in ordine, ecc.
Ci sono vari testi sull'analisi degli algoritmi / prestazioni della struttura dati che le persone raccomandano, ma ciò che ha davvero senso per me è stato imparare OCaml. Avere a che fare con strutture di dati complesse è il punto forte del ML, e il loro comportamento è molto più chiaro quando puoi evitare i puntatori e la gestione della memoria come in C. (Imparare OCaml solo per capire le strutture dei dati è quasi certamente la strada più lunga, però. :))