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