File hash
File hash
 il file è suddiviso in bucket (secchi) numerati da
0 a B-1
 ciascun bucket è costituito da uno o più blocchi
(collegati mediante puntatori) ed è organizzato
come un heap
Bucket
bucket 0
bucket 1
…………………
bucket B-1
…
Bucket directory
L’accesso ai bucket avviene attraverso la
bucket directory che contiene B elementi
0
1
B-1
…
………..
…
Funzione hash
Dato un valore v per la chiave il numero del
bucket in cui deve trovarsi un record con chiave
v è calcolato mediante una funzione che prende
il nome di funzione hash
Inserimento
0
v
1
…
v
h(v)=0
B-1
………..
…
Operazioni
Una qualsiasi operazione (ricerca,
inserimento, cancellazione, modifica) su
un file hash richiede
– la valutazione di h(v) per individuare il
bucket
– esecuzione dell’operazione sul bucket che
è organizzato come un heap.
Costi operazioni
Pertanto:
Se la funzione hash distribuisce
uniformemente i record nei bucket:
 ogni bucket è costituito da n/B blocchi
e quindi
 il costo richiesto di un’operazione è
approssimativamente 1/B-esimo del costo
della stessa operazione se il file fosse
organizzato come un heap.
Funzione hash
Una funzione hash per essere “buona”
deve ripartire uniformemente i record
nei bucket, cioè al variare del valore
della chiave deve assumere con la
“stessa” probabilità uno dei valori
compresi tra 0 e B-1.
Esempio funzione hash
1. trattare il valore v della
chiave come una
sequenza di bit
2. suddividere tale
sequenza in gruppi di bit
di uguale lunghezza e
sommare tali gruppi
trattandoli come interi
v
100101111010
100101111010
9
+
7
+
10 = 26
Esempio funzione hash
3. dividere il risultato per il numero dei bucket
(cioè per B) e prendere il resto della divisione
come numero del bucket in cui deve trovarsi il
record con chiave v.
Es: se B=3 allora il record con chiave v si deve
trovare nel bucket 2 in quanto
26=3*8+2