Massimo Benerecetti Tabelle Hash: gestione delle collisioni

Documenti analoghi
Analisi dell Hashing

Informatica 3. Informatica 3. LEZIONE 22: Politiche di risoluzione delle collisioni. Lezione 23 - Modulo 1. Politiche di risoluzione delle collisioni

Risoluzione delle collisioni con indirizzamento aperto

Tabelle Hash. Massimo Benerecetti. Informatica. Lezione n. Parole chiave: Inserire testo. Corso di Laurea:

TABELLE AD INDIRIZZAMENTO DIRETTO

Esercizi Capitolo 7 - Hash

Tabelle Hash. Implementazioni Dizionario. Implementazione. Tabelle ad accesso diretto. Tempo richiesto dall operazione più costosa:

Massimo Benerecetti Tabelle Hash

Dizionario. Marina Zanella Algoritmi e strutture dati Tabelle hash 1

Gianpiero Cabodi e Paolo Camurati Dip. Automatica e Informatica Politecnico di Torino

Algoritmi 2 - Dr. Simone Faro - Esercizi sulle Tabelle Hash 1

Algoritmi e Strutture di Dati I 1. Algoritmi e Strutture di Dati I Massimo Franceschet francesc

INTRODUZIONE INTRODUZIONE TABELLE HASH FUNZIONE HASH

Tavole (o tabelle) hash

Implementazione di dizionari

Algoritmi e Strutture Dati

Algoritmi e strutture dati

Tabelle hash. Vittorio Maniezzo - Università di Bologna

Look up table, caso generale

Heap scenario. Ho un insieme dinamico di oggetti, ciascuno identificato con una priorità. (la priorità è semplicemente un numero);

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati

Tavole hash. Alcune possibili implementazioni dell ADT Dizionario. Tavole ad accesso diretto. Tempo richiesto dall operazione più costosa:

Hash file. idea di base : il file è organizzato in B bucket, i record sono assegnati ai bucket in ragione del valore di chiave.

Hash Tables. Ilaria Castelli A.A. 2009/2010. Università degli Studi di Siena Dipartimento di Ingegneria dell Informazione

Organizzazioni hash. Corso di Basi di Dati e Sistemi Informativi

FILE E INDICI Architettura DBMS

Informatica 3. Informatica 3. LEZIONE 21: Ricerca su liste e tecniche di hashing. Lezione 21 - Modulo 1. Introduzione (1) Introduzione (2) Ricerca:

COGNOME E NOME (IN STAMPATELLO) MATRICOLA

Divide et impera (Divide and Conquer) Dividi il problema in sottoproblemi piu` semplici e risolvili ricorsivamente

Algoritmi e Strutture Dati

Liste concatenate. Violetta Lonati

Tabelle Hash! Presentare le tabelle hash e la nozione di funzione di hashing Discutere la complessità di questa realizzazione per le Tavole

Università degli Studi G.d Annunzio Chieti Pescara Corso di Laurea in Economia Informatica

05EIP. Fulvio Corno, Matteo Sonza Reorda Dip. Automatica e Informatica Politecnico di Torino

INDICI PER FILE. Accesso secondario. Strutture ausiliarie di accesso

Informatica 3. Informatica 3. LEZIONE 23: Indicizzazione. Lezione 23 - Modulo 1. Indicizzazione. Introduzione. Indicizzazione:

Databases. Architettura di un DBMS: Struttura ad indice per i files, B + -Trees

Analisi ammortizzata (Tarjan in 1985)

Elaborato di Algoritmi e Strutture Dati. Traficante Nicola

Il TDA Map. Tabelle hash

Definizione informale. Il TDA Map memorizza coppie formate da una chiave k e da un valore v. La coppia è chiamata entry. Ogni chiave deve essere unica

Il TDA Map. Definizione informale. I metodi del TDA Map 2. I metodi del TDA Map 1. Interfaccia Map 1 NO_SUCH_KEY. Tabelle hash

Algoritmi e Strutture Dati

Strutture fisiche e strutture di accesso ai dati

Sommario. Tabelle ad indirizzamento diretto e hash Funzioni Hash

ALGORITMI CORSO DI STUDIO IN INFORMATICA (laurea triennale) UNIVERSITÀ DEGLI STUDI DI CATANIA ANNO ACCADEMICO 2014/15

Sommario. Le strutture dati elementari per implementare sequenze: Vettori Liste

argomenti Hashing Funzioni hash per file Tabelle hash Funzioni hash e metodi per generarle Inserimento e risoluzione delle collisioni Eliminazione

Algoritmi e Strutture Dati

Strutture di accesso ai dati: B + -tree

Alberi ed Alberi Binari di Ricerca

Informatica Generale Andrea Corradini Gli algoritmi e la risoluzione di problemi

ORDINE DI INSERIMENTO DELLE CHIAVI <35 >35

Strutture Dati. Parte I: pile, code, liste, tabelle hash

Strutture di accesso ai dati: B + -tree

Esercitazione 5 Algorithmi e Strutture Dati (Informatica) A.A 2015/2016

Dipartimento di Elettronica, Informazione e Bioingegneria API 2013/4

QUICKSORT. Basato sul paradigma divide-et-impera (come MERGE-SORT)

INFORMATICA 3 Prof.ssa Sara Comai

Code a priorità Una coda a priorità è una struttura dati astratta che permette di rappresentare un insieme di elementi su cui è definita una

Strutture Dati. (parte I: pile, code, liste, tabelle hash)

Spesso sono definite anche le seguenti operazioni:

LABORATORIO DI PROGRAMMAZIONE 2 Corso di laurea in matematica. Algoritmi ricorsivi

POLITECNICO DI MILANO ESAME DI INFORMATICA 3 Prof.ssa Sara Comai Laurea On Line Anno Accademico 2003/2004 II Prova in itinere

Informatica 3. LEZIONE 26: Implementazioni avanzate per liste e array. Modulo 1: Skip list Modulo 2: Multiliste Modulo 3: Rappresentazioni di matrici

INFORMATICA A. Titolo presentazione sottotitolo. Laboratorio n 6 Dott. Michele Zanella Ing. Gian Enrico Conti

Organizzazione Fisica dei Dati (Parte II)

Informatica 3. Informatica 3. LEZIONE 26: Implementazioni avanzate per liste e array. Lezione 26 - Modulo 1. Introduzione. Esempio

Code a priorità. Progettazione di Algoritmi Matricole congrue a 1. Docente: Annalisa De Bonis

Algoritmi e Strutture Dati. Capitolo 3 Strutture dati elementari

Algoritmi e Strutture Dati

Memorizzazione di una relazione

Algoritmi e strutture dati

NUMERI CASUALI E SIMULAZIONE

Per regnare occorre tenere divisi i nemici e trarne vantaggio. fai ad ogni passo la scelta più conveniente

Dizionari. Hashtables.

Algoritmi e Strutture di Dati I 1. Algoritmi e Strutture di Dati I Massimo Franceschet francesc

! 11.2! Silberschatz, Galvin and Gagne 2005! Operating System Concepts 7 th Edition, Jan 1, 2005!

ESERCITAZIONI DI INTRODUZIONE AGLI ALGORITMI (A.A. 08/09)

Dizionari. Corso di Programmazione 3 - Ingegneria dell Informazione e dell Organizzazione 5 dicembre, Gino Perna

Algoritmi e Strutture Dati. Capitolo 3 Strutture dati elementari

Tecniche Algoritmiche: divide et impera

ADT Mappa. Le chiavi (il mezzo per accedere agli elementi) hanno lo scopo di rendere efficiente la ricerca. Strutture Dati

Tipo di dato Dizionario

Dati e Algoritmi I (Pietracaprina) Esercizi sugli Alberi

Algoritmi di Ricerca. Esempi di programmi Java. Prof. Angela Bonifati

Algoritmi e Strutture Dati

ADT Dizionario. Come nella Mappa: Diversamente dalla Mappa:

Basi di Dati e Sistemi Informativi. Organizzazione fisica dei dati. Corso di Laurea in Ing. Informatica Ing. Gestionale Magistrale

Esercizi per il corso di Algoritmi, anno accademico 2011/12

Il file È un insieme di informazioni: programmi. Il File System. Il file system

Esercizio. Scrivere una classe ListMap<K, V> che implementa la mappa con una lista. Strutture Dati

Il File System. Sistemi Operativi T AA

come segue: data una collezione C di elementi e una un elemento che verifica la proprietà P

Problemi di ricerca in insiemi ordinati

Il file system. Le caratteristiche di file, direttorio e partizione sono del tutto indipendenti dalla natura e dal tipo di dispositivo utilizzato.

Il file system. Il File System. Il file È un insieme di informazioni: programmi dati testi

Introduzione agli Algoritmi ed alle Strutture Dati Anno Accademico 2015/2016 Appello 23/6/2016

Transcript:

Massimo Benerecetti Tabelle Hash: gestione delle collisioni # Lezione n. Parole chiave: Corso di Laurea: Informatica Insegnamento: Algoritmi e Strutture Dati I Email Docente: bene@na.infn.it A.A. 2009-2010

Gestione delle collisioni Nessuno schema di hashing può garantire, in generale, l assenza di collisioni. Si pone quindi il problema di come risolvere le collisioni? Esistono due tecniche principali: Indirizzamento aperto la tabella è una array che contiene al massimo un oggetto per indice spazio di memeoria contiguo Indirizzamento chiuso (concatenamento) la tabella è un array di catene (ad esempio liste concatenate). Tutti gli elementi su una catena hanno lo stesso indice spazio di memoria dinamico

Indirizzamento aperto Tutti i dati sono contenuti all interno della tabella. Non è necessaria memoria aggiuntiva oltre alla tabella. In caso di collisioni, vengono tentate posizioni alternative finché non se ne trova una vuota. Per avere buone prestazione è tipicamente necessaria una tabella assai più grande del numero di elementi da memorizzare. Il tasso di riempimento (m/n, numero di chiavi in tabella diviso dimensione della tabella) dovrebbe essere mantenuto al di sotto del 50%. La figura a destra riporta il risultato dell inserimento, nell ordine, delle chiavi 0, 1, 4, 9, 16, 25, 36, 49. La chiave 36 collide in posizione 6 con la chiave 16. 36 viene così inserita nella prima cella libera in posizione 7. Analogamente accade per la chiave 49 (che collide con 9). La prima cella libera è, in questo caso, in posizione 2. h(k) = k mod 10 0 1 2 3 4 5 6 7 8 9 0 1 49 4 25 16 36 9

Indirizzamento aperto: inserimento e ricerca Hash-Search(T,k) Hash-Insert(T,k) i = 0 i = 0 repeat repeat j = h(k,i) j = h(k,i) if (T[j] = k) then if (T[j] = NIL) then return j T[j] = k else return j i = i + 1 else until (T[j] = NIL or i = n) i = i + 1 return NIL until i = n error: Table Overflow Data una funzione di hash h(k) (detta hash primario) definiamo una nuova funzione di hash h(k,i), con parametri la chiave k e l indice i del sondaggio tale che h(k,0)= h(k).

Funzione di hash con sondaggi Tentare altre celle Le celle h(x,0), h(x,1), h(x,2), vengono sondate in successione finché non se ne trova una libera. La funzione di Hash h(x,i) ideale soddisfa la condizione di Hashing Uniforme: «ogni chiave k ha la stessa probabilità di determinare, come sequenza di sondaggi, una qualsiasi delle n! permutazioni della sequenza 0,1,,n-1» In pratica si riescono a realizzare funzioni di Hash che approssimano più o meno bene l Hashing Uniforme.

Funzione di hash con sondaggi Tentare altre celle Le celle h(x,0), h(x,1), h(x,2), vengono sondate in successione. h(x,i) = ( h(x) + f(i) ) mod TSIZE f(0) = 0 f definisce la strategia di risoluzione delle collisioni. Sondaggio (probing) lineare f(i) = i Sondaggio (probing) quadratico f(i) = i 2

Sondaggio lineare A titolo di esempio, definiamo il seguente schema di hashing con sondaggio lineare: h(x) = x mod TZISE e f(i) = i h(x,i) = ( h (x) + f(i) ) mod TSIZE = ( x + i ) mod TSIZE Nella figura a fianco è riportata la simulazione dello schema a fronte delle seguenti operazioni: Inserimento di 19, 28, 39, 48, 29, 18 Cancellazione di 28 Ricerca di 18 Esempio di operazioni su tabella hash con sondaggio lineare Si noti che l eventuale cancellazione fisica di 28 dalla tabella impedirebbe una ricerca con successo di 18. Infatti, la cancellazione di 28 interromperebbe la catena dei sondaggi necessari a trovare 18.

Sondaggio lineare Sondaggio (probing) lineare È il metodo di risoluzione delle collisioni più semplice Dato un indice hash, esegue una ricerca lineare della chiave desiderata una locazione vuota (per l inserimento) La tabella è vista come un array circolare, al raggiungimento dell ultimo indice, la ricerca riparte dal primo indice (realizzato tramite operazione di modulo) Se la tabella non è piena, è sempre possibile trovare una posizione vuota.

Inserire titolo slide h N 2 N 1 0 1 Chiavi h(key) Simulazione del sondaggio lineare.

Inserire titolo slide h N 2 N 1 0 1 Chiavi (h(key)+1) mod N Simulazione del sondaggio lineare.

Inserire titolo slide h N 2 N 1 0 1 Chiavi (h(key)+2) mod N Simulazione del sondaggio lineare.

Inserire titolo slide h N 2 N 1 0 1 Chiavi (h(key)+3) mod N Simulazione del sondaggio lineare.

Inserire titolo slide h N 2 N 1 0 1 Chiavi (h(key)+4) mod N Simulazione del sondaggio lineare.

Sondaggio lineare: problemi Clustering primario Lo svantaggio maggiore del sondaggio lineare è che quando la tabella diventa piena quasi per metà, si verifica una tendenza al Clustering (raggruppamento) primario (sul valore primario dell hash) Il clustering primario si verifica quando gli elementi iniziano a delinearsi come lunghe file di posizioni adiacenti occupate. Tutte le chiavi il cui hash è nel cluster, aumentano la dimensione del cluster. Anche con chiavi che hanno valori di hash diversi dalla chiave che ha dato origine al cluster. La ricerca lineare di una locazione libera (vuota) diviene sempre più lunga

Clustering primario Il clustering primario si verifica quando gli elementi iniziano a delinearsi come lunghe file di posizioni adiacenti occupate. N 2 N 1 0 1 Tutte le chiavi il cui hash ricade nel cluster aumentano la dimensione del cluster, anche chiavi che hanno valori di hash primari diversi quello dalla chiave che ha dato origine al cluster. (h(key) + i) mod N La ricerca di una locazione libera (vuota) diviene sempre più lunga.

Sondaggio quadratico Sondaggio (probing) quadratico Se hash(key) = h, tentare le locazioni h+1, h+4, h+9, h+16, ecc. Cioè tentare le locazioni h + i 2 per i = 1,2,3,4, Elimina il problema del clustering primario (i sondaggi non sono contigui) Ma anche se la tabella non è piena, non è garantito che si riesca a trovare una cella vuota. Gli elementi che hanno lo stesso valore di hash primario, indirizzeranno lo stesso insieme di celle alternative: clustering secondario in pratica non costituisce un grosso problema

Sondaggio quadratico h N 2 N 1 0 1 Chiavi h(key) N = 16

Sondaggio quadratico h N 2 N 1 0 1 Chiavi (h(key) + 1) mod N N = 16

Sondaggio quadratico h N 2 N 1 0 1 Chiavi (h(key) + 4) mod N N = 16

Sondaggio quadratico h N 2 N 1 0 1 Chiavi (h(key) + 9) mod N N = 16

Sondaggio quadratico h N 2 N 1 0 1 Chiavi (h(key) + 16) mod N N = 16

Sondaggio quadratico h N 2 N 1 0 1 Chiavi (h(key) + 25) mod N N = 16

Sondaggio quadratico h N 2 N 1 0 1 Chiavi (h(key) + 36) mod N N = 16

Sondaggio quadratico h N 2 N 1 0 1 Chiavi (h(key) + 49) mod N N = 16

Sondaggio quadratico h N 2 N 1 0 1 Chiavi (h(key) + 81) mod N N = 16 Possono essere sondate solo 4 su 16 locazioni!

Sondaggio quadratico h N 2 N 1 0 1 Chiavi h(key) N = 17 (primo) Proviamo a cambiare la dimensione della tabella

Sondaggio quadratico h N 2 N 1 0 1 Chiavi (h(key) + 1) mod N N = 17 (primo)

Sondaggio quadratico h N 2 N 1 0 1 Chiavi (h(key) + 4) mod N N = 17 (primo)

Sondaggio quadratico h N 2 N 1 0 1 Chiavi (h(key) + 9) mod N N = 17 (primo)

Sondaggio quadratico h N 2 N 1 0 1 Chiavi (h(key) + 16) mod N N = 17 (primo)

Sondaggio quadratico h N 2 N 1 0 1 Chiavi (h(key) + 25) mod N N = 17 (primo)

Sondaggio quadratico h N 2 N 1 0 1 Chiavi (h(key) + 36) mod N N = 17 (primo)

Sondaggio quadratico h N 2 N 1 0 1 Chiavi (h(key) + 49) mod N N = 17 (primo)

Sondaggio quadratico h N 2 N 1 0 1 Chiavi (h(key) + 64) mod N N = 17 (primo)

Sondaggio quadratico h N 2 N 1 0 1 Chiavi (h(key) + 81) mod N N = 17 (primo)

Sondaggio quadratico h N 2 N 1 0 1 Chiavi (h(key) + 100) mod N N = 17 (primo)

Sondaggio quadratico h N 2 N 1 0 1 Chiavi (h(key) + 121) mod N N = 17 (primo)

Sondaggio quadratico h N 2 N 1 0 1 Chiavi (h(key) + 144) mod N N = 17 (primo) N = 17 (primo) Ora si possono sondare 9 delle 17 locazioni!

Sondaggio quadratico Teorema: Nel sondaggio quadratico con dimensione della tabella numero primo, un nuovo elemento trova sempre spazio se la tabella è vuota almeno per metà. Dimostrazione: Sia la dimensione della tablla, TSIZE, un numero primo > 3, mostreremo che le prime TSIZE/2 locazioni alternative (sondaggi) sono tutte distinte. Sia 0 i j TSIZE/2 due diversi indici di sondaggio. Dimostriamo che (h(x) + i 2 ) mod TSIZE (h(x) + j 2 ) mod TSIZE Assumiamo, al contrario, che (h(x) + i 2 ) mod TSIZE = (h(x) + j 2 ) mod TSIZE Quindi, deve essere i 2 mod TSIZE = j 2 mod TSIZE, cioè (j 2 - i 2 ) mod TSIZE = 0 (j-i)(j+i) mod TSIZE = 0

Sondaggio quadratico Teorema: Se si usa il sondaggio quadratico, e la dimensione della tabella è un numero primo, allora: un elemento nuovo può sempre essere inserito se la tabella è vuota almeno per metà. Dimostrazione: Quindi, deve essere i 2 mod TSIZE = j 2 mod TSIZE, cioè (j 2 - i 2 ) mod TSIZE = 0 (j-i)(j+i) mod TSIZE = 0 Ma 0 i j TSIZE/2, quindi j + i < TSIZE (TSIZE è dispari) (j-i)(j+i) mod TSIZE = 0 implica che TSIZE divide (j-i)(j+i) Per lemma di Euclide se un primo p divide a b allora p divede a o b. Poiché TSIZE è primo, deve valere che TSIZE divide (j-i) o (j+i) Ma entrambi i casi sono impossibili, poiché 0 < (j-i), (j+i) TSIZE, quindi TSIZE non può dividere nessuno dei due numeri. Concludiamo, quindi, che i 2 mod TSIZE j 2 mod TSIZE.

Sondaggio quadratico Teorema: Se si usa il sondaggio quadratico, e la dimensione della tabella è un numero primo, allora un elemento nuovo può sempre essere inserito se la tabella è vuota almeno per metà. Applicazione: Il sondaggio visita solo 9 delle 17 posizioni, ma se la tabella è metà vuota, non tutte le 9 posizioni possono essere occupate, quindi possiamo inserire un nuovo elemento in una di esse. Esempio di sondaggio quadratico Clustering secondario: gli elementi con lo stesso valore primario di hash, genereranno la stessa sequenza di sondaggi: in pratica non costituisce un grosso problema

Numero medio di sondaggi

Sondaggio casuale Sondaggio casuale (random) usare un generatore di numeri pseudo-casuali per ottenere una sequenza, ripetibile nella stessa sessione di esecuzione, per identificare lo i-esimo sondaggio. h(k,i) = (h(k) + r i ) mod N dove r i è l i-esimo valore in una permutazione random dei numeri 1...(N-1). più semplice da implementare del sondaggio quadratico ma soffre degli stessi problemi: clustering secondario. infatti la sequenza di sondaggio dipende solo dalla dal valore di hash primario h(k). Tutte le soluzioni viste permettono di generare N differenti sequenze di sondaggio (una per ogni locazione della tabella).

Doppio Hashing Doppio Hashing usare una seconda funzione hash per trovare una locazione alternativa h(k,i) = (h 1 (k) + i h 2 (k)) mod N è la soluzione migliore in quanto permette di generare N 2 differenti sequenze di sondaggio (la sequenza, infatti, dipende in due modi differenti, e tra loro indipendenti, dalla chiave k). h 2 (k) deve essere relativamente primo con N, altrimenti non tutta la tabella potrebbe venire ispezionata. es. 1: N primo, h 1 (k) = k mod N e h 2 (k) = 1 + (k mod N-1). es. 2: N = 2 p e h 2 (k) produce sempre numeri dispari.

Rehashing Cancellazioni le cancellazioni con l indirizzamento aperto sono difficili la cencellazone lazy è il metodo preferibile si marcano gli elementi cancellati come non allocati, in modo che possano essere riutilizzati quando il numero di record cancellati raggiunge qualche livello di soglia (predeterminato), si può effettuare un operazione di garbage collection per riottenere le locazioni cancellate (perché è utile?)

Rehashing Nel caso di indirizzamento aperto Tabella troppo piena Tempo di esecuzione troppo lungo Inserimento può fallire (quando?) La dimensione DEVE essere scelta in anticipo Ma non sappiamo il numero di elementi Rehashing Costruire una nuova tabella di dimensione circa il doppio Rimappare (via Hash) tutti gli elementi nella nuova tabella (preché?)

Rehashing Reashing: per n/2 elementi, la dimensione della tabella è n. Il costo addizionale per ogni inserimento è O(n)/(n/2) = O(1), dove O(n) è il costo per rimappare nella nuova tabella tutte le chiavi presenti in tabella.

Rehashing Quando applicare l estensione della tabella hash? La tabella è piena per metà L inserimento fallisce raggiunge una soglia t predeterminata Rimensione della nuova tabella circa 2 volte più grande o, più in generale, circa x volte più grande: con x = 1.5, 2, 2.5, 3

Rehashing: esempio Si supponga uno schiema di hashing in cui Valore iniziale di n = TSIZE = 7 Funzoine di hashing: h(x) = x mod TSIZE Risoluzione delle collisioni con sondaggio lineare Soglia di rehashing m/n = 66% (con m numero di chiavi presenti) Inserimento delle chiavi: 19, 10, 5, 22, 15 Rehashing con nuovo valore TSIZE = 17 La figura a destra illustra il risultato della operazione di rehashing. Esempio di Rehashing.

É necessaria una Struttura Dati Secondaria Lista Albero Una seconda Tabella Hash Se ci aspettiamo poche collisioni, possiamo utilizzare un lista Semplice Indirizzamento Chiuso: concatenamento Poco lavoro aggiuntivo necessario Inserimenti nelle catene in tempo costante Vantaggi: permette maggiore utilizzo della tabella e non necessita di rehashing.

Indirizzamento Chiuso: concatenamento 81 Risultato dell inserimento delle chiavi a sinistra con funzione di hashing hash(x) = x mod 10.

Lunghezza media lista di concatenamento Calcolo della lunghezza media di una lista di collisione.

Lunghezza media lista di concatenamento 81 Calcolo della lunghezza media di una lista di collisione.

Lunghezza media lista di concatenamento 81 Calcolo della lunghezza media di una lista di collisione.

Lunghezza media lista di concatenamento La lunghezza media di una lista di collisione equivale al fattore di carico

Concatenamento: tempo di ricerca = m/n : numero di elementi inseriti (m) diviso per la dimensione della tabella (n). : rappresenta la lunghezza media di una lista Tempo medio di esecuzione della ricerca hashing ( (1)) + attraversamento della lista elemento non trovato: elemento trovato: 1 + /2 Almeno 1 link viene ispezionato La lunghezza media di una lista è Ci si aspetta in media di trovare un elemento presente dopo aver attraversato metà della lista. Regola euristica: mantenere 1.

Concatenamento: tempo di ricerca Data una tabella hash con fattore di carico = m/n (m numero di chiavi inserite, n dimensione della tabella), allora: il tempo medio impiegato per una ricerca senza successo è al massimo: (1 + ) il tempo medio impiegato per una ricerca con successo è al massimo: (1 + )

Vantaggi del concatenamento a liste con una buona funziona hash le liste puntate risultano corte il clustering non è un problema gli elementi con chiavi differenti stanno su catene differenti la dimensione della tabella è meno rilevante le cancellazioni sono facili ed efficienti Concatenamento: conclusioni le catene potrebbero anche essere implementate come alberi binari di ricerca o loro varianti più efficienti

Hashing: sommario Dimensione della tabella: Numero Primo Funzione Hash: basata su operazioni di modulo Gestione delle Collisioni Indirizzamento chiuso (concatenamento) Indirizzamento aperto (sondaggi) Sondaggio lineare, quadratico, doppio : fattore di carico (numero di elementi diviso per la dimensione della tabella). Indirizzamento chiuso: 1 Indirizzamento aperto: 0.5 Rehashing