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

Documenti analoghi
argomenti Hashing Richiamo sul concetto di dizionario Tabelle hash ! Hashing ! Funzioni hash per file ! Insieme di coppie del tipo <elemento, chiave>

TABELLE AD INDIRIZZAMENTO DIRETTO

Dizionario. Marina Zanella Algoritmi e strutture dati Tabelle hash 1

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

Algoritmi e strutture dati

INTRODUZIONE INTRODUZIONE TABELLE HASH FUNZIONE HASH

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:

Algoritmi e Strutture Dati

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

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

Tavole (o tabelle) hash

Implementazione di dizionari

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

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

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

COGNOME E NOME (IN STAMPATELLO) MATRICOLA

Algoritmi e Strutture Dati. Lezione 5

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

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

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

Sommario. Tabelle ad indirizzamento diretto e hash Funzioni Hash

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

Organizzazioni hash. Corso di Basi di Dati e Sistemi Informativi

Tabelle hash. Vittorio Maniezzo - Università di Bologna

Look up table, caso generale

Analisi dell Hashing

Esercizi Capitolo 7 - Hash

Tipo di dato Dizionario

Array e Oggetti. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica. Dispensa 17. A. Miola Gennaio 2012

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

Altro di ADT. Dominio. Funzioni. Dominio. Funzioni. Costanti - Collezioni

Massimo Benerecetti Tabelle Hash: gestione delle collisioni

Dizionari. Hashtables.

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

Hash Table. Hash Table

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

Algoritmi e Strutture Dati

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

SET: specifica INTRODUZIONE. SET: esempio Si stampano i numeri casuali in ordine di generazione e il contenuto dell insieme.

Massimo Benerecetti Tabelle Hash

Heap e Code di Priorità

Algoritmi e Strutture Dati

Risoluzione delle collisioni con indirizzamento aperto

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

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

algoritmi e strutture di dati

Scritto di Algoritmi e s.d. (1o anno) 14 Luglio 2004 TESTO e RISPOSTE (in fondo)

Tecnica HASH. Corso di Linguaggi di Programmazione. Stefano Ferilli. Pasquale Lops.

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

Algoritmi e Strutture Dati

Algoritmi e Strutture di Dati

ALBERI. Un Albero. Un grafo aciclico che non è un albero: due archi entranti in uno stesso nodo

Algoritmi e Strutture Dati

Esercizi parte 3. La classe ArrayBinTree dovra implementare, tra le altre, l operazione seguente: padre: dato un nodo, restituire l indice del padre.

Applicazioni: Correttore ortografico: Hashtable. Funzioni hash: MD5 e SHA.

Esercitazioni del Corso di Fondamenti di Informatica ARRAY. Prof. Giuseppe Manco. A cura di Ing. Andrea Tagarelli

Efficienza algoritmi. Esempi

Algoritmi di Ricerca. Esempi di programmi Java

Algoritmi di Ricerca. Esempi di programmi Java

Coda su lista concatenata

Algoritmi e Strutture Dati

INFORMATICA 3 Prof.ssa Sara Comai

Dati e Algoritmi 1: A. Pietracaprina. Mappa (I parte)

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

Esame di Algoritmi e Strutture Dati Corso di Laurea in Ingegneria Informatica Canali A-L, M-Z

3. un metodo che restituisce l elenco delle matricole di tutti gli studenti del corso;

determinare una funzione di accesso non biunivoca ma che riduca al massimo la possibilità di collisioni (funzione hash),

Informatica 3. LEZIONE 16: Heap - Codifica di Huffmann. Modulo 1: Heap e code di priorità Modulo 2: Esempio applicativo: codifica di Huffmann

Hashing. Dott. Ezio Bartocci, Dott. Francesco De Angelis. Laboratorio di Algoritmi e strutture Dati - AA 2006/2007

Laboratorio di Algoritmi e Strutture Dati II Semestre 2005/2006. Templates C++ ed Alberi di Ricerca

SimpleList: Realizzazione. Strutture dati. Strutture dati lineari: liste. SimpleList: rappresentazione collegata. Lista semplice: SimpleList

Programmazione Orientata agli Oggetti in Linguaggio Java

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

Spesso sono definite anche le seguenti operazioni:

Il TDA Dictionary. Definizione informale. I metodi del TDA Dictionary 1. Applicazioni. I metodi del TDA Dictionary 2. I metodi del TDA Dictionary 3

Esercizi su Array. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa E09. C. Limongelli Novembre 2007

Definizione informale

Definizione informale. Il TDA Dictionary (dizionario) modella una collezione di voci su cui è possibile effettuare delle ricerche

Algoritmi e Strutture Dati 2/ed Quiz a risposta multipla

ORDINAMENTO PER SELEZIONE ORDINAMENTO PER SELEZIONE ORDINAMENTO VELOCE CONFRONTI

Alberi ed Alberi Binari di Ricerca

Problemi di ordinamento

Dipartimento di Elettronica, Informazione e Bioingegneria API 2013/4

Si usano quando serve accesso rapido sia in lettura che in scrittura su un insieme non ordinato

Array. Walter Didimo

Fondamenti di Informatica. Algoritmi di Ricerca e di Ordinamento

Alberi. Strutture dati: Alberi. Alberi: Alcuni concetti. Alberi: definizione ricorsiva. Alberi: Una prima realizzazione. Alberi: prima Realizzazione

Ricerca in una sequenza ordinata

Esercizi su array. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica. Dispensa E08. C. Limongelli Gennaio 2012

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

tipi di dato astratti

Array e Oggetti. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa 12. A. Miola Dicembre 2006

Algoritmi di ordinamento

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

Capitolo 16 Iterazione

Transcript:

Hashing

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

Implementazione di un dizionario Insieme di coppie del tipo <elemento, chiave> Le chiavi appartengono a un insieme totalmente ordinato Operazioni: insert(el, key) delete(key) search(key) Indirizzamento diretto: si associa ad ogni valore della chiave un indice di un array ricerca in tempo O(1) Problemi? Hashing 3

Indirizzamento diretto Ogni chiave corrisponde a el. diverso dell array Può portare a spreco di memoria Es.: 10000 studenti e matr.= No. decimale a 5 cifre 0 2 No. chiavi N -1 Hashing 4

Obiettivi N ~ No. Chiavi effettivamente usate Tempo di ricerca O(1) D.: possibile? Nota: No. Chiavi possibili può essere >> T 0 2 No. chiavi T -1 Hashing 5

Tabella hash Dato l insieme base di un dizionario: <T, h> T è una tabella h: K {0,..., T -1} K insieme delle possibili chiavi {0,..., T -1} insieme delle posizioni nella tabella Hashing 6

asd_library.hash.hashtable public class HashTable implements Dictionary_adt{ public HashTable() { } this(default_table_size); public HashTable(int size) { allocatetable(size); makeempty(); isrehashable = false; } Hashing 7

Funzioni hash perfette e collisioni Funzione hash perfetta: k 1!=k 2 h(k 1 )!= h(k 2 ) Richiede T >= K Raramente ragionevole in pratica In generale T < K (spesso T << K ) Conseguenza: k 1!=k 2 ma h(k 1 ) == h(k 2 ) è possibile Collisione Es.: proporre una funzione hash perfetta nel caso in cui le chiavi siano stringhe di lunghezza 3 sull alfabeto {a, b, c} Hashing 8

Requisiti di una funzione hash Uniformità semplice: Pr[h(k)=j] ~ 1/ T La probabilità è calcolata rispetto alla distribuzione delle chiavi Intuitivamente, si desidera che gli elementi si distribuiscano nell array in modo uniforme Difficile costruire funzioni che soddisfino la proprietà D.: perché? Hashing 9

Requisiti di una funzione hash/2 Esempio: sia T =5 e h(k)=k mod 5 {1, 7, 10, 14} Non è nota la distribuzione delle chiavi {1, 6, 11, 16} Può aversi agglomerazione degli elementi In pratica: si cerca di avere indipendenza dai dati 0 1 2 3 4 0 1 2 3 4 Hashing 10

Interpretazione delle chiavi Tra gli elementi di K è definito un ordinamento totale ma: Le chiavi non sono necessariamente numeri naturali (o persino numeri) Es.: stringhe Soluzione: associare a ciascuna chiave un intero Modalità dipendono da insieme delle chiavi e applicazione Hashing 11

Esempio: stringhe Possibile metodo: associare a ciascun carattere il valore ASCII e alla stringa il numero intero ottenuto in una base scelta Esempio: base 2, posizioni meno significative a destra Stringa = p t chiave = 112*2 1 +116*2 0 =240 Ascii( p )=112 Ascii( t )=116 Hashing 12

Derivazione di funzioni hash Molti metodi Divisione Ripiegamento Mid-square Estrazione... Obiettivo: distribuzione possibilmente uniforme Differenze: Complessità Fenomeni di agglomerazione Hashing 13

Divisione h(k)=k mod T - Bassa complessità Attenzione ai fenomeni di agglomerazione No potenze di 2: se m=2 p allora tutte le chiavi con i p bit meno significativi uguali collidono No potenze di 10 se le chiavi sono numeri decimali (motivo simile) In generale, la funzione dovrebbe dipendere da tutte le cifre della chiave (comunque rappresentata) Scelta buona in pratica: numero primo non troppo vicino a una potenza di 2 (esempio: h(k)=k mod 701 per K =2048 valori possibili) Hashing 14

Ripiegamento Chiave k suddivisa in parti k 1,k 2,...,k n h(k)=f(k 1,k 2,...,k n ) Esempio: la chiave è un No. di carta di credito. Possibile funzione hash: 1. 4772 6453 7348 {477, 264, 537, 348} 2. f(477,264,537,348) = (477+264+537+348)mod 701 = 224 Hashing 15

Estrazione Si usa soltanto una parte della chiave per calcolare l indirizzo Esempio: 6 cifre centrali del numero di carta di credito 4772 6453 7348 264537 Il numero ottenuto può essere ulteriormente manipolato L indirizzo può dipendere da una porzione della chiave Hashing 16

HashTable.hash() public static int hash( String key, int tablesize ){ int hashval = 0; for( int i = 0; i < key.length( ); i++ ) hashval = 37 * hashval + key.charat( i ); hashval %= tablesize; if( hashval < 0 ) hashval += tablesize; return hashval; } Hashing 17

Risoluzione delle collisioni I metodi si distinguono per la collocazione degli elementi che danno luogo alla collisione Concatenazione: alla i-esima posizione della tabella è associata la lista degli elementi tali che h(k)=i Indirizzamento aperto: tutti gli elementi sono contenuti nella tabella Hashing 18

Concatenazione h(k 1 )= h(k 4 )=0 h(k 5 )= h(k 7 )=h(k 2 )=4 0 1 2 3 4 k 1 k 4 k 2 k 5 k 7 k 2 Es.: h(k)=k mod 5 k 1 =0, k 4 =10 k 5 =9, k 7 =14, k 2 =4 Hashing 19

Concatenazione/2 insert(el, k): inserimento in testa alla lista associata alla posizione h(k) costo O(1) search(k): ricerca lineare nella lista associata alla posizione h(k) costo O(lungh. lista associata a h(k)) delete(k): ricerca nella lista associata a h(k), quindi cancellazione costo O(lungh. lista associata a h(k)) Hashing 20

Indirizzamento aperto Tutti gli elementi sono memorizzati nella tabella Le collisioni vanno risolte all interno della tabella Se la posizione calcolata è già occupata occorre cercarne una libera I diversi metodi ad indirizzamento diretto si distinguono per il metodo di scansione adottato La funzione hash dipende anche dal numero di tentativi effettuati Indirizzo=h(k, i) per l i-esimo tentativo Hashing 21

Inserimento insert (el, k) { /* T denota la tabella */ i=0; while (h(k, i) <occupata> && (i< T )) i++; if (i < T ) <inserisci el in pos. i> else <overflow> } Hashing 22

HashTable.insert() public Object insert(comparable key ){ int collisionnum = 0; int initialpos = hash( key.tostring(),table.length ); int currentpos=initialpos; while((collisionnum<=table.length)&& table[ currentpos ]!= null &&!table[ currentpos ].equals( key ) ){ currentpos = initialpos + k * ++collisionnum; // Compute ith probe currentpos = currentpos % table.length; // Implement the mod } if (collisionnum > table.length){ System.out.println("Insertion impossible: hash table full"); return null; } Hashing 23

HashTable.insert() else if (table[ currentpos ].equals( key ) ){ System.out.println("Element "+ key +" is alredy in the hash table."); return key; }else{ table[ currentpos ] = key; ++currentsize; System.out.println("Insertion: ok!"); return key; } } Hashing 24

Ricerca search (k) { /* T denota la tabella */ i=0; while ((k!=key(t[h(k, i)])) && (i< T )) i++; if (i < T ) <restituisci T[h(k, i)]> else <elemento assente> } Hashing 25

Cancellazione delete (k) { /* T denota la tabella */ search(k); if (<trovato>) <elimina elemento con chiave k> } Hashing 26

HashTable.remove() public Comparable remove(comparable key ){ int collisionnum = 0; int initialpos = hash( key.tostring(),table.length ); int currentpos=initialpos; while(!table[ currentpos ].equals( key )&& (collisionnum<=table.length)){ currentpos = initialpos + k * ++collisionnum; // Compute ith probe currentpos = currentpos % table.length; // Implement the mod } Hashing 27

HashTable.remove() if (!table[ currentpos ].equals( key )){ System.out.println("Element "+ key +" isn't in the hash table."); return null; }else{ System.out.println("Element "+ key +" is removed from the hash table."); table[currentpos]=null; return key; } } Hashing 28

Scansione La funzione h(k, i) deve essere tale che tutte le posizioni della tabella siano esaminate Sono possibili diverse forme per la funzione h(k,i) Scansione lineare Scansione quadratica Hashing doppio Si differenziano per complessità e comportamento rispetto a fenomeni di agglomerazione Hashing 29

Scansione lineare h(k, i) = (h (k)+i) mod T, dove h (k) è una funzione di hashing Si scandiscono tutte le posizioni nella sequenza T[h (k)], T[h (k)]+1,... T[ T ], 0, 1,..., T[h (k)]-1 Possibilità di agglomerazione primaria: gli elementi si agglomerano per lunghi tratti Hashing 30

Agglomerazione primaria h(k, i) = (h (k)+i) mod 101, h (k)=k mod 101 {2, 103, 104, 105,...} Caso estremo, ma il problema Esiste Prob[cella succ. gruppo]= dim(gruppo + 1)/ T 0 1 2 Prob[cella isolata]= 1/ T 100 Hashing 31

Scansione quadratica h(k, i) = (h (k)+c 1 i+c 2 i 2 ) mod T, dove h (k) è una funzione di hashing, c 1 e c 2 sono costanti Es.: h(k, i) = h (k)+i 2, h(k, i+1) = h (k)-i 2, i=1,..., ( T -1)/2 Possibilità di agglomerazione secondaria: se h (k 1 )= h (k 2 ) h (k 1,i)= h (k 2,i) Descrivere h(k, i) quando h (k)=k mod 5 Hashing 32

Hashing doppio h(k, i) = (h 1 (k)+ih 2 (k)) mod T, dove h 1 (k) e h 2 (k) sono funzioni di hashing Es.: h(k, i) = h (k)+i 2, h(k, i+1) = h (k)-i 2, i=1,..., ( T -1)/2 Anche la modalità di scansione dipende dalla chiave L hashing doppio riduce i fenomeni di agglomerazione Hashing 33

Universal Hashing/1 Nel caso peggiore possono essere scelte n chiavi tali che h(k 1 )= h(k 2 )=. h(k n ). In questo caso il tempo di retrieval è O(n) Qualsiasi funzione hashing deterministica puo incontrare questo caso peggiore. Nell Universal Hashing si definisce una famiglia di funzioni hash. Una delle funzioni è selezionata a priori, in modo indipendente dalle chiavi degli elementi. Hashing 34

Universal Hashing/2 H e una famiglia di funzioni hash H e universale se per ogni coppia x,y: #h H:h(x)=h(y)= H / T La probabilità di collisione tra due chiavi è simile ad una scelta casuale di h(x): E[ c xy ] = 1/ T Hashing 35

Universal Hashing/3 Come costruire una famiglia universale H di funzioni hash? m= T primo x = <x 0, x 1,.., x r > r+1 bytes a = <a 0, a 1,.., a r > r+1 elementi random in {0,,m-1} h a = r! i= 0 a i x i mod m H contiene m r+1 funzioni H = U a h a Hashing 36

Universal Hashing/4 Thm:H è una famiglia universale di funzioni hash Fissati <a 1,.., a r > esiste un solo valore a 0 a r! 0 ( x0 " y0) = " a i( xi " yi )(mod m) i= 0 Percio ogni coppia di x e y collide esattamente per un m r valori della sequenza a Poiche vi sono m r+1 valori possibili per la sequenza a, la collisione avviene con probabilita 1/m Hashing 37