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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top