Capitolo 7 Tavole hash Algoritmi e Strutture Dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano.

Slides:



Advertisements
Presentazioni simili
Algoritmi e Strutture Dati
Advertisements

Il problema della ricerca Algoritmi e Strutture Dati.
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Hash Tables Indirizzamento diretto Tabelle Hash Risoluzioni di collisioni Indirizzamento aperto.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Ordinamenti lineari.
Capitolo 3 Strutture dati elementari Algoritmi e Strutture Dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano.
Capitolo 3 Strutture dati elementari Algoritmi e Strutture Dati.
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Capitolo 10 Tecniche algoritmiche Algoritmi e Strutture Dati.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Ordinamenti lineari.
Capitolo 4 Ordinamento Algoritmi e Strutture Dati.
Algoritmi e Strutture Dati
Capitolo 4 Ordinamento Algoritmi e Strutture Dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano.
Capitolo 3 Strutture dati elementari Algoritmi e Strutture Dati.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Ordinamenti lineari.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Ordinamenti lineari.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Capitolo 12 Minimo albero ricoprente: Algoritmi di Prim e di Borůvka Algoritmi.
Capitolo 10 Tecniche algoritmiche Algoritmi e Strutture Dati.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Capitolo 4 Ordinamento:
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Capitolo 4 Ordinamento:
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Capitolo 6 Interrogazioni.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Capitolo 12 Minimo albero ricoprente: Algoritmi di Prim e di Borůvka Algoritmi.
Il problema della ricerca Algoritmi e Strutture Dati.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Capitolo 8 Code con.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Algoritmi e Strutture Dati Capitolo 2 Modelli di calcolo e metodologie.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Capitolo 12 Minimo albero ricoprente: Algoritmi di Prim e di Boruvka Algoritmi.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Capitolo 8 Code con.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Capitolo 6 Il problema.
Algoritmi e Strutture Dati
Visite di grafi Algoritmi e Strutture Dati. Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw.
Capitolo 9 Il problema della gestione di insiemi disgiunti (Union-find) Algoritmi e Strutture Dati.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Algoritmi e Strutture Dati Capitolo 2 Modelli di calcolo e metodologie.
Capitolo 7 Tavole hash Algoritmi e Strutture Dati.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Alberi AVL (Adelson-Velskii.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Usa la tecnica del.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Alberi AVL (Adelson-Velskii.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Capitolo 6 Rotazioni.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Diremo che f(n) =
Capitolo 7 Tavole hash Algoritmi e Strutture Dati.
Capitolo 4 Ordinamento: Selection e Insertion Sort Algoritmi e Strutture Dati.
Capitolo 4 Ordinamento: Selection e Insertion Sort Algoritmi e Strutture Dati.
Hashing.
Capitolo 7 Tavole hash Algoritmi e Strutture Dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano.
Implementazione di dizionari Problema del dizionario dinamico Scegliere una struttura dati in cui memorizzare dei record con un campo key e alcuni altri.
Capitolo 6 Alberi di ricerca Algoritmi e Strutture Dati.
Capitolo 9 Il problema della gestione di insiemi disgiunti (Union-find) Algoritmi e Strutture Dati.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Capitolo 6 Rotazioni.
Capitolo 8 Code con priorità Algoritmi e Strutture Dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Capitolo 4 Ordinamento:
Hashing. 2 argomenti Hashing Tabelle hash Funzioni hash e metodi per generarle Inserimento e risoluzione delle collisioni Eliminazione Funzioni hash per.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Capitolo 8 Code con.
Algoritmi e Strutture Dati
Capitolo 10 Tecniche algoritmiche Algoritmi e Strutture Dati.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Soluzione esercizio.
Capitolo 9 Union-find Algoritmi e Strutture Dati.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Capitolo 4 Ordinamento:
Capitolo 11 Visite di grafi Algoritmi e Strutture Dati.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Algoritmi e Strutture Dati Capitolo 2 Modelli di calcolo e metodologie.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Soluzione esercizio.
Analisi asintotica e Metodi di analisi Algoritmi e Strutture Dati.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Capitolo 6 Il problema.
Capitolo 6 Il problema del dizionario Algoritmi e Strutture Dati.
Capitolo 10 Tecniche algoritmiche Algoritmi e Strutture Dati.
Capitolo 11 Grafi e visite di grafi Algoritmi e Strutture Dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano.
Capitolo 6 Alberi di ricerca Algoritmi e Strutture Dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano.
Algoritmi e Strutture Dati
Transcript della presentazione:

Capitolo 7 Tavole hash Algoritmi e Strutture Dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano

Algoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 2 Implementazioni Dizionario - Liste e array - Alberi di ricerca non bilanciati - Alberi di ricerca bilanciati - Tavole hash O(n) O(log n) O(1) Tempo richiesto dall’operazione più costosa:

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 3 Tavole ad accesso diretto Idea: –dizionario memorizzato in un array v di m celle –a ciascun elemento è associata una chiave intera nell’intervallo [0,m-1] –elemento con chiave k contenuto in v[k] –al più n≤m elementi nel dizionario Sono dizionari basati sulla proprietà di accesso diretto alle celle di un array

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 4 Implementazione

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 5 Fattore di carico Misuriamo il grado di riempimento di una tavola ad accesso diretto usando il fattore di carico  = n m Esempio: tavola con i nomi di 100 studenti indicizzati da numeri di matricola a 6 cifre n=100m=10 6  = 0,0001 = 0,01% Grande spreco di memoria!

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 6 Pregi e difetti –Tutte le operazioni richiedono tempo O(1) Pregi: –Le chiavi devono essere necessariamente interi in [0, m-1] –Lo spazio utilizzato è proporzionale ad m, non al numero n di elementi: può esserci grande spreco di memoria! Difetti:

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 7 Tavole hash Idea: –Chiavi prese da un universo totalmente ordinato U (possono non essere numeri) –Funzione hash: h: U  [0, m-1] (funzione che trasforma chiavi in indici) –Elemento con chiave k in posizione v[h(k)] Per ovviare agli inconvenienti delle tavole ad accesso diretto ne consideriamo un’estensione: le tavole hash

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 8 Collisioni Le tavole hash possono soffrire del fenomeno delle collisioni. Si ha una collisione quando si deve inserire nella tavola hash un elemento con chiave u, e nella tavola esiste già un elemento con chiave v tale che h(u)=h(v): il nuovo elemento andrebbe a sovrascrivere il vecchio!

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 9 Funzioni hash perfette u  v  h(u)  h(v) Una funzione hash si dice perfetta se è iniettiva, cioè per ogni u,v  U: Un modo per evitare il fenomeno delle collisioni è usare funzioni hash perfette. Deve essere |U| ≤ m

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 10 Implementazione

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 11 Esempio Tavola hash con i nomi di 100 studenti aventi come chiavi numeri di matricola nell’insieme U=[234717, ] Funzione hash perfetta: h(k) = k n=100m=1001  = 0,1 = 10% L’assunzione |U| ≤ m necessaria per avere una funzione hash perfetta è raramente conveniente (o possibile)…

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 12 Esempio Tavola hash con elementi aventi come chiavi lettere dell’alfabeto U={A,B,C,…} Funzione hash non perfetta (ma buona in pratica per m primo): h(k) = ascii(k) mod m Ad esempio, per m=11: h(‘C’) = 67 mod 11=1 h(‘N’)= 78 mod 11=1  h(‘C’) = h(‘N’)  se volessimo inserire sia ‘C’ che ‘N’ nel dizionario avremmo una collisione!

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 13 Uniformità delle funzioni hash Per ridurre la probabilità di collisioni, una buona funzione hash dovrebbe essere in grado di distribuire in modo uniforme le chiavi nello spazio degli indici della tavola Questo si ha ad esempio se la funzione hash gode della proprietà di uniformità semplice

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 14 Uniformità semplice Sia P(k) la probabilità che la chiave k sia presente nel dizionario e sia: la probabilità che la cella i sia occupata. Una funzione hash h gode dell’uniformità semplice se, per ogni i=1..m:

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 15 Esempio Se U è l’insieme dei numeri reali in [0,1] e ogni chiave ha la stessa probabilità di essere scelta, allora è semplice dimostrare che la funzione hash: soddisfa la proprietà di uniformità semplice

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 16 Risoluzione delle collisioni 1. Liste di collisione (n≥m,  ≥1). Gli elementi sono contenuti in liste esterne alla tabella: v[i] punta alla lista degli elementi tali che h(k)=i 2. Indirizzamento aperto (n ≤ m,  ≤ 1). Tutti gli elementi sono contenuti nella tabella: se una cella è occupata, se ne cerca un’altra libera Nel caso in cui non si possano evitare le collisioni, dobbiamo trovare un modo per risolverle. Due metodi classici sono i seguenti:

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 17 Liste di collisione Esempio di tabella hash basata sulla funzione hash h(k) = ascii(k) mod 11 e su liste di collisione, contenente le lettere della parola: PRECIPITEVOLIS SIMEVOLMENTE

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 18 Implementazione

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 19 Indirizzamento aperto Supponiamo di voler inserire un elemento con chiave k e la sua posizione “naturale” h(k) sia già occupata. L’indirizzamento aperto consiste nell’occupare un’altra cella, anche se potrebbe spettare di diritto a un’altra chiave. Cerchiamo la cella vuota (se c’è) scandendo le celle secondo una sequenza di indici: c(k,0), c(k,1), c(k,2),…c(k,m-1)

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 20 Implementazione

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 21 Metodi di scansione: scansione lineare c(k,i) = ( h(k) + i ) mod m per 0 ≤ i < m Scansione lineare:

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 22 Esempio Inserimenti in tavola hash basata sulla funzione hash h(k)=ascii(k) mod 31 e su indirizzamento aperto con scansione lineare delle lettere della parola: PRECIPITEVOLIS SIMEVOLMENTE 4,8 celle scandite in media per inserimento

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 23 Metodi di scansione: scansione quadratica c(k,i) = ( h(k) + c 1 i +c 2 i 2 ) mod m per 0 ≤ i < m Scansione quadratica: Si può dimostrare che per c 1 =c 2 =0.5 e m potenza di 2 viene scandita tutta la tavola

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 24 Metodi di scansione: hashing doppio c(k,i) =  h 1 (k) + i·h 2 (k)  mod m L’hashing doppio riduce il problema: per 0 ≤ i < m, h 1 e h 2 funzioni hash La scansione lineare provoca effetti di agglomerazione primaria, cioè lunghi gruppi di celle consecutive occupate che rallentano la scansione La scansione quadratica provoca invece agglomerazione secondaria

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 25 Esempio Inserimenti in tavola hash basata basata sulla funzione hash h 1 (k)=ascii(k) mod 31 h 2 (k)=ascii(k) mod 30 e su indirizzamento aperto con hashing doppio delle lettere della parola: PRECIPITEVOLIS SIMEVOLMENTE 3,1 celle scandite in media per inserimento

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 26 Analisi del costo di scansione Nel caso peggiore, O(n) Nel caso medio, un’operazione di ricerca di una chiave, assumendo che le chiavi siano prese con probabilità uniforme da U, costa: dove  =n/m (fattore di carico)

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 27 Cancellazione elementi con indir. aperto

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 28 La proprietà di accesso diretto alle celle di un array consente di realizzare dizionari con operazioni in tempo O(1) indicizzando gli elementi usando le loro stesse chiavi (purché siano intere) L’array può essere molto grande se lo spazio delle chiavi è grande Per ridurre questo problema si possono usare funzioni hash che trasformano chiavi (anche non numeriche) in indici Usando funzioni hash possono aversi collisioni Tecniche classiche per risolvere le collisioni sono liste di collisione e indirizzamento aperto Riepilogo