Doppio hashing
Quando doppio metodo del valore diffusione o hashing doppio ( inglese hashing doppio ) è un metodo per realizzare una chiusa metodo hash . Nei metodi hash chiusi, si cerca di accogliere disertori nella la tabella hash invece di memorizzare loro all'interno della cellula (per esempio come una lista). (Le procedure hash aperte possono assegnare voci due volte e quindi non richiedono alcun sondaggio.) Attenzione: come nella tabella hash degli articoli sotto "Varianti della procedura hash", i termini "hash aperto" o "hash chiuso" sono usati esattamente nel modo opposto.
Per fare ciò, il doppio hashing utilizza una funzione di sondaggio che include una funzione hash secondaria, ad es. B. , e che viene utilizzato se l' indice calcolato dalla funzione hash primaria è già occupato.
La funzione hash completa quindi legge :, dove j è il numero di indici già "provati", i. Ciò significa che j viene aumentato di 1 ogni volta che un indice è già utilizzato.
La funzione di sondaggio dovrebbe formare una permutazione degli indici della tabella hash.
La sequenza di funzioni hash che ora vengono formate utilizzando e assomiglia a questa:
Il costo di questo metodo è vicino al costo dell'hashing ideale.
Indipendenza delle funzioni hash
Il doppio hashing utilizza due funzioni hash indipendenti e . Questi sono chiamati indipendenti se la probabilità di una cosiddetta doppia collisione, ad es. H. , è minore o uguale a, e quindi minimo, dove è la dimensione dell'array.
Esempi
Funzioni di esempio
Dimensioni dell'array: m
Indici: {0; m-1}
Funzione hash primaria: ( metodo del resto della divisione )
Funzione hash secondaria:
Funzione esplorativa:
Funzione double hash completa:
Esempio di calcolo
Dimensione della matrice: m = 7
- Funzioni hash
- Funzione esplorativa
Tabella hash:
| K | 10 | 19 ° | 31 | 22nd | 14th | 16 |
|---|---|---|---|---|---|---|
| H | 3 | 5 | 3 | 1 | 0 | 2 |
| H ' | 1 | 5 | 2 | 3 | 5 | 2 |
L'array è stato riempito con l'aiuto della tabella hash e della funzione probe:
| 0 | 1 | 2 | 3 | 4 ° | 5 | 6 ° |
|---|---|---|---|---|---|---|
| 31 | 22nd | 16 | 10 | - | 19 ° | 14th |
Spiegazione utilizzando l'esempio :
e non generano una collisione e quindi non è necessaria la funzione double hash . L'indice della funzione hash può essere letto qui. crea una collisione nell'array nel punto , motivo per cui ora usi la funzione double hash con :
Il punto crea di nuovo una collisione, motivo per cui il seguente viene chiamato con:
La posizione è vacante e quindi riceve il contenuto .