it-swarm.it

Qual è la differenza tra un hash e un dizionario?

Qual è la differenza tra Hash e Dictionary?

Proveniente da un background di script, sento che sono simili, ma volevo scoprire le differenze esatte. Googling non mi ha aiutato molto.

48
Sairam

Hash è una struttura di dati con un nome estremamente scadente in cui il programmatore ha confuso l'interfaccia con l'implementazione ( e = era troppo pigro per scrivere il nome completo, ovvero HashTable invece di ricorrere ad un'abbreviazione, Hash).

Dictionary è il nome "corretto" dell'interfaccia (= il ADT ), ovvero un contenitore associativo che mappa (solitamente univoci) le chiavi a valori (non necessariamente univoci).

Una tabella hash è one 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:

  1. le chiavi devono essere hashable e uguaglianza comparabile.
  2. le voci non appaiono in un ordine particolare nel dizionario.

(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 alle chiavi - questo è spesso chiamato un dizionario ordinato (e di solito è implementato in termini di un albero di ricerca, sebbene esistano altre implementazioni efficienti).


Per riassumere: a dizionario è un ADT che mappa le chiavi ai valori. Esistono diverse possibili implementazioni 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.

94
Konrad Rudolph

"Dizionario" è il nome del concetto. Una tabella hash è una possibile implementazione.

8
dan_waterworth

Un dizionario è il termine collettivo indicato per qualsiasi implementazione della struttura dati utilizzata per ricerche/inserimenti rapidi. Ciò può essere ottenuto/implementato utilizzando una varietà di strutture di dati come tabella hash, skip list, albero rb ecc. Una tabella hash è una struttura dati specifica utile per molti scopi, inclusa l'implementazione di un dizionario.

7
aufather

Un dizionario usa una chiave per fare riferimento al valore direttamente all'interno di un array associativo.

cioè (KEY => VALUE)

Un hash è più spesso descritto come tabella hash che utilizza un funzione hash per calcolare la posizione in memoria (o più facilmente un array) dove il valore sarà. L'hash prenderà il KEY come input e darà un valore come output. Quindi collegare quel valore nella memoria o nell'indice dell'array.

cioè 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 )

5
Ross