Capitolo 7 Tavole hash Algoritmi e Strutture Dati.

Slides:



Advertisements
Presentazioni simili
Algoritmi e Strutture Dati
Advertisements

Algoritmi e Strutture Dati
Il problema della ricerca Algoritmi e Strutture Dati.
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Capitolo 4 Ordinamento Algoritmi e Strutture Dati.
Algoritmi e Strutture Dati
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.
Algoritmi e Strutture Dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Stesso approccio.
Capitolo 3 Strutture dati elementari Algoritmi e Strutture Dati.
Algoritmi e Strutture Dati
Capitolo 4 Ordinamento Algoritmi e Strutture Dati.
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Capitolo 10 Tecniche algoritmiche Algoritmi e Strutture Dati.
Algoritmi e Strutture Dati Capitolo 2 Modelli di calcolo e metodologie di analisi.
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 Stesso approccio.
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.
Algoritmi e Strutture Dati Capitolo 2 Modelli di calcolo e metodologie di analisi.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Capitolo 12 Minimo albero ricoprente: Algoritmi di Prim e di Borůvka Algoritmi.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Stesso approccio.
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.
Capitolo 13 Cammini minimi: Algoritmo di Floyd e Warshall Algoritmi e Strutture Dati.
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.
Il problema della ricerca 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 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 4 Ordinamento: Selection e Insertion Sort 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 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 Capitolo 6 Il problema.
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 1 Un albero è un grafo.
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 4 Ordinamento: Selection e Insertion Sort Algoritmi e Strutture Dati.
Capitolo 4 Ordinamento: Selection e Insertion Sort Algoritmi e Strutture Dati.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Capitolo 12 Minimo albero ricoprente: Algoritmi di Prim e di Borůvka Algoritmi.
Capitolo 7 Tavole hash 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. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Capitolo 6 Rotazioni.
Capitolo 13 Cammini minimi: Algoritmo di Floyd e Warshall Algoritmi e Strutture Dati.
Capitolo 8 Code con priorità Algoritmi e Strutture Dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano.
Algoritmi e Strutture Dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Soluzione esercizio.
Capitolo 7 Tavole hash Algoritmi e Strutture Dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano.
Capitolo 8 Code con priorità Algoritmi e Strutture Dati.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Soluzione esercizio.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Capitolo 6 Il problema.
Capitolo 6 Alberi di ricerca Algoritmi e Strutture Dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano.
Transcript della presentazione:

Capitolo 7 Tavole hash Algoritmi e Strutture Dati

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 2 Implementazioni Dizionario - Liste e array - Alberi binari di ricerca - Alberi AVL - Tavole hash (H. P. Luhn, IBM, 1953) O(n) O(log n) O(1) Tempo richiesto dalloperazione più costosa: …ma a certe condizioni!

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 3 Preambolo: tavole ad accesso diretto Idea (simile all Integer Sort ): –Supponiamo che a ciascun elemento e sia associata una chiave intera k nellintervallo [0,m-1] –Il dizionario viene memorizzato in un array v di m celle –Lelemento con chiave k è contenuto in v[k] 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 Analogamente all Integer Sort, avrò che lo spazio utilizzato sarà proporzionale al valore massimo m che una chiave può assumere, e non al numero n di elementi effettivamente contenuti nel dizionario! 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] (non possiamo accogliere un elemento con chiave m) –Lo spazio utilizzato è proporzionale alla chiave più grande 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 (letteralmente, tritare): 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 unestensione: 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: NOTA: Ovviamente, 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 nellinsieme U=[234717, ] Funzione hash perfetta: h(k) = k n=100m=1001 = 0,1 = 10% …ma il vincolo m |U| necessario 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 Funzioni hash non perfette u v h(u) h(v) Una funzione hash si dice non perfetta se non è iniettiva, cioè esistono u,v U per cui: Si potrebbero quindi avere collisioni, ovverosia, può accadere che esistano 2 chiavi u e v tali che u v ma h(u)=h(v).

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 13 Esempio Tavola hash di dimensione m con elementi aventi come chiavi le 26 lettere dellalfabeto inglese U={A,B,C,…,Z} Funzione hash non perfetta: h(k) = ascii(k) mod m con m<26 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 14 Ridurre al minimo le collisioni Per ridurre la probabilità di collisioni, una buona funzione hash dovrebbe essere in grado di distribuire in modo quanto più uniforme possibile le chiavi nello spazio degli indici della tavola Questo accade, 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 15 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. Def: La funzione hash h gode delluniformità semplice se, per ogni intero i in [0,m-1]:

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 16 Esempio Se U è linsieme 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 17 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 unaltra 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 Liste di collisione Esempio di tabella hash con liste di collisione per la gestione di una rubrica telefonica

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 19 Analisi del costo di una ricerca Nel caso migliore, O(1) Nel caso peggiore, O(n) (devo scandire una lista di trabocco che contiene tutti gli elementi del dizionario) Nel caso medio, se la funzione hash gode delluniformità semplice, allora T AVG (n,m)=O(n/m), in quanto le liste di trabocco si equipartiscono gli elementi.

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Indirizzamento aperto Supponiamo di voler inserire un elemento con chiave k e la sua posizione naturale h(k) sia già occupata Lindirizzamento aperto consiste nelloccupare unaltra cella, anche se potrebbe spettare di diritto a unaltra chiave Cerchiamo la prima cella vuota disponibile scandendo le celle secondo una sequenza di indici: c(k,0)=h(k), 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 21 Metodi di scansione: scansione lineare c(k,i) = ( h(k) + i ) mod m per 0 i < m Scansione lineare: gli elementi che confliggono vengono messi luno dopo laltro nella tabella (vengono cioè scandite celle contigue):

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 22 Esempio Esempio di tabella hash con indirizzamento aperto a scansione lineare per la gestione di una rubrica telefonica: si noti la collisione indiretta tra Ted Baker e Sandra Dee, che in realtà avrebbero unallocazione diversa secondo la funzione hash.

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 23 Il problema dellagglomerazione primaria La scansione lineare provoca effetti di agglomerazione primaria, cioè lunghi gruppi di celle consecutive occupate che rallentano la scansione: infatti, più cresce la dimensione di un gruppo di celle contigue occupate, e più tale insieme di celle tenderà a crescere (perché sempre più elementi collideranno e si accoderanno al gruppo) !

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 24 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: risolve il problema dellagglomerazione primaria, scandendo celle non contigue. 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 25 Metodi di scansione: hashing doppio c(k,i) = h(k) + i·h (k) mod m Lhashing doppio riduce il problema: per 0 i < m, h e h funzioni hash, m e h (k) primi tra loro (così da scandire tutta la tabella) La scansione quadratica risolve il problema dellagglomerazione primaria, ma provoca invece agglomerazione secondaria: coppie di chiavi collidenti generano la stessa sequenza di scansione: h(k 1 )=h(k 2 ) c(k 1,i)=c(k 2,i)

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

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Esercizio di approfondimento Supponete di inserire le chiavi 10, 22, 31, 4, 15, 28, 17, 88, 59 (in questordine) in una tavola hash di lunghezza m=11 (con indici in [0,10]) utilizzando l'indirizzamento aperto con la funzione hash h(k)=k mod m. Illustrate il risultato dell'inserimento di queste chiavi utilizzando la scansione lineare, la scansione quadratica con c 1 =1 e c 2 =3, e lhashing doppio con h (k)=1+(k mod (m-1)). Copyright © The McGraw - Hill Companies, srl 27

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Soluzione (scansione lineare) Copyright © The McGraw - Hill Companies, srl 28

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Soluzione (scansione quadratica) Copyright © The McGraw - Hill Companies, srl 29

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Soluzione (hashing doppio) Copyright © The McGraw - Hill Companies, srl 30