Risposte:
Hash
è una struttura di dati dal nome estremamente scadente in cui il programmatore ha confuso l'interfaccia con l'implementazione ( ed era troppo pigro per scrivere il nome completo, vale a dire HashTable
invece ricorrere ad un'abbreviazione Hash
).
Dictionary
è il nome "corretto" dell'interfaccia (= ADT ), ovvero un contenitore associativo che mappa (solitamente univoci) le chiavi su valori (non necessariamente univoci).
Una tabella hash è una possibile implementazione di un tale dizionario che fornisce caratteristiche di accesso abbastanza buone (in termini di runtime) ed è quindi spesso l'implementazione predefinita.
Tale implementazione ha due proprietà importanti:
(Affinché una chiave sia hash significa che possiamo calcolare un valore numerico da una chiave che viene successivamente utilizzata come indice in un array.)
Esistono implementazioni alternative della struttura dei dati del dizionario che impongono un ordinamento sulle chiavi - questo viene spesso chiamato dizionario ordinato (e di solito viene implementato in termini di un albero di ricerca, sebbene esistano altre implementazioni efficienti).
Riassumendo: un dizionario è un ADT che mappa le chiavi sui valori. Esistono diverse implementazioni possibili di questo ADT, di cui la tabella hash è una. Hash
è un termine improprio ma nel contesto è equivalente a un dizionario implementato in termini di una tabella hash.
Hash
classe con una tabella hash, dal momento che Ruby 1.9 Hash
es preserva l'ordine di inserimento mentre una tabella hash no. Quindi, in Ruby 1.9, il nome Hash
non riflette nemmeno più l'implementazione.
"Dizionario" è il nome del concetto. Una tabella hash è una possibile implementazione.
Un dizionario è il termine collettivo indicato per qualsiasi implementazione della struttura di dati utilizzata per ricerche / inserimenti rapidi. Ciò può essere ottenuto / implementato utilizzando una varietà di strutture dati come una tabella hash, salta liste, albero rb ecc. Una tabella hash è una struttura dati specifica utile per molti scopi, inclusa l'implementazione di un dizionario.
Un dizionario utilizza una chiave per fare riferimento al valore direttamente all'interno di un array associativo .
vale a dire (KEY => VALUE)
Un hash è più spesso descritto come una tabella hash che utilizza una funzione hash per calcolare la posizione in memoria (o più facilmente un array) dove sarà il valore. L'hash prenderà KEY come input e darà un valore come output. Quindi collegare quel valore nella memoria o nell'indice dell'array.
vale a dire KEY => HASH FUNCTION => VALUE
Immagino che uno sia diretto mentre l'altro no. Le funzioni di hash potrebbero non essere perfette e talvolta possono fornire un indice che fa riferimento a un valore errato. Ma questo può essere corretto.
Il miglior posto dove cercare: Wikipedia ( array associativo e tabella hash )
unordered_map
a mostrare quello che fanno piuttosto che quello che sono.