Quale struttura dati è appropriato per questa situazione?
-
19-09-2019 - |
Domanda
Sto cercando di decidere quale datastructure da utilizzare per memorizzare coppie chiave-valore, quando caratteristiche necessarie solo sono
- inserimento
- ricerca
In particolare, non ho bisogno di essere in grado di eliminare le coppie, o iterare chiavi / valori / coppie.
I tasti sono tuple interi, i valori sono puntatori (riferimenti, a prescindere). Sono solo la memorizzazione di un paio di milioni di paia distribuiti su (molti) oggetti.
Al momento sto valutando utilizzando
- una tabella hash
- un kd-tree
- un b-albero
Sono sporgendosi verso la tabella di hash (per la O(1)
inserimento tempo / ricerca), ma volevo confermare i miei inclinazioni.
Quale struttura (di quelli sopra o altro) mi consiglia e perché? Se consiglierei una tabella di hash, devo creare una tabella separata per ogni oggetto, o semplicemente creare una singola tabella e utilizzare l'ID dell'oggetto come parte della tupla chiave?
Soluzione
Una tabella hash sarà la scelta migliore qui come tutte le operazioni che ti interessano sono O (1) (e come tale si deve non è necessario preoccuparsi di creazione di più tabelle hash).
Altri suggerimenti
Sono un grande fan di tabelle hash, in quanto sono facili e ci sono implementazioni disponibili per praticamente tutte le principali lingue là fuori. O (1) inserimento / ricerca è particolarmente buona caratteristica.
Probabilmente si dovrebbe utilizzare un unico tavolo, per risparmiare sulla memoria. tabelle hash sono notoriamente inefficienti memory-saggio, e l'utilizzo di una singola tabella aiuterebbe a ridurre al minimo questo.
Le tabelle hash sarebbe utile qui e non vedo alcun motivo per avere più di una tabella.
La maggior parte delle piante hanno un O (n ln n) Occhiata tempo, ma hashtables hanno un O (1) tempo di ricerca, in modo che è quello che si desidera utilizzare. È anche molto comune, e spesso l'implementazione è altamente ottimizzato per l'avvio.