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

Documenti analoghi
Algoritmi e strutture dati

Algoritmi e Strutture Dati

Tavole (o tabelle) hash

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati

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

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

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

Tipo di dato Dizionario

Implementazione di dizionari

Sommario. Tabelle ad indirizzamento diretto e hash Funzioni Hash

Algoritmi e Strutture Dati

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

TABELLE AD INDIRIZZAMENTO DIRETTO

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati

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

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

Dizionario. Marina Zanella Algoritmi e strutture dati Tabelle hash 1

INTRODUZIONE INTRODUZIONE TABELLE HASH FUNZIONE HASH

Risoluzione delle collisioni con indirizzamento aperto

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

Massimo Benerecetti Tabelle Hash

Analisi dell Hashing

Corso di Informatica

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

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

Esercizi Capitolo 7 - Hash

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

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

Massimo Benerecetti Tabelle Hash: gestione delle collisioni

ORDINE DI INSERIMENTO DELLE CHIAVI <35 >35

Organizzazioni hash. Corso di Basi di Dati e Sistemi Informativi

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

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

Tabelle hash. Vittorio Maniezzo - Università di Bologna

Look up table, caso generale

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

Algoritmi e Strutture Dati

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

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

Strutture di accesso ai dati: B + -tree

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

Strutture di accesso ai dati: B + -tree

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

Algoritmi e Strutture Dati. Capitolo 1 Un introduzione informale agli algoritmi

Algoritmi e Strutture Dati

Analisi ammortizzata (Tarjan in 1985)

Algoritmi e Strutture Dati

Corso di Algoritmi e Strutture Dati Informatica per il Management Prova Scritta, 9/9/2015

Algoritmi e Strutture Dati 2/ed Quiz a risposta multipla

ADT Dizionario. Come nella Mappa: Diversamente dalla Mappa:

Algoritmi e strutture dati

TIPO DI DATO ASTRATTO

FILE E INDICI Architettura DBMS

ARRAY E LISTE. Ivan Lanese

Algoritmi e Strutture Dati

Alberi di ricerca. Dizionari. Definizione. Alberi binari di ricerca (BST = binary search tree) Algoritmi e Strutture Dati

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

Tabelle hash. Funzione hash

Alberi di ricerca. Alberi binari di ricerca. F. Damiani - Alg. & Lab. 04/05 (da C. Demetrescu et al - McGraw-Hill)

Liste concatenate. Violetta Lonati

INDICI PER FILE. Accesso secondario. Strutture ausiliarie di accesso

Algoritmi e Strutture di Dati

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

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

Un esempio: l ADT Dizionario (mutabile) Definizione. Alberi binari di ricerca (BST = binary search tree) search(chiave k) -> elem

Algoritmi e strutture dati

T 1 =1. n 4 n log n. T n =3 T. Esercizio 1 (6 punti) A.A Esame di Algoritmi e strutture dati 18 luglio 2008

Algoritmi e Strutture Dati. Capitolo 3 Strutture dati elementari

Sistemi di Calcolo (A.A ) Corso di Laurea in Ingegneria Informatica e Automatica Sapienza Università di Roma

Dizionari. Hashtables.

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

Strutture Dati per Inserimento Ordinato

algoritmi e strutture di dati

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

Algoritmi e Strutture Dati. Capitolo 3 Strutture dati elementari

Algoritmi e Strutture Dati

INFORMATICA 3 Prof.ssa Sara Comai

Strutture dati e loro organizzazione. Gabriella Trucco

TABELLA DEI SIMBOLI. Structure of a Compiler. Semantic Analyzer SYMBOL TABLE. Code Generator. Optimizer

Dipartimento di Elettronica, Informazione e Bioingegneria API 2013/4

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

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

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

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

Laboratorio di Programmazione

Lunghezza media. Teorema Codice D-ario prefisso per v.c. X soddisfa. L H D (X). Uguaglianza vale sse D l i. = p i. . p.1/27

ADT Dizionario. Ordered search table. Supponiamo che sia definita una relazione d'ordine totale sulle chiavi del dizionario D:

Abbiamo già visto nel capitolo precedente come queste tre operazioni si possano implementare sulle strutture dati analizzate.

Dipartimento di Elettronica, Informazione e Bioingegneria API 2013/4

COGNOME E NOME (IN STAMPATELLO) MATRICOLA

Strutture Dati per Inserimento Ordinato. Luca Abeni

Algoritmi e Strutture Dati

Algoritmi e Strutture di Dati

Strutture fisiche e strutture di accesso ai dati

Liste, Pile e Code. 1. L ADT Lista. Liste Pile e Code Pag. 1/18

Transcript:

Tavole hash Una rapida panoramica Alcune possibili implementazioni dell ADT Dizionario Tempo richiesto dall operazione più costosa: Liste Alberi di ricerca non bilanciati Alberi di ricerca bilanciati Tavole hash O(n) O(n) O(log n) O(1) Tavole ad accesso diretto

Tavole ad accesso diretto Implementano l ADT dizionario basandosi sulla proprietà di accesso diretto alle celle di un array Idea: dizionario memorizzato in 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 Implementazione Fattore di carico Misuriamo il grado di riempimento di una tavola usando il fattore di carico n α = m Esempio: tavola con nomi di studenti indicizzati da numeri di matricola a 6 cifre n=100 m=10 6 α = 0,0001 = 0,01% Grande spreco di memoria!

Pregi e difetti Pregi: Tutte le operazioni richiedono tempo O(1) Difetti: 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! Tavole hash Tavole hash Per ovviare agli inconvenienti delle tavole ad accesso diretto ne consideriamo un estensione: le 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)]

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! Funzioni hash perfette Un modo per evitare il fenomeno delle collisioni è usare funzioni hash perfette. Una funzione hash si dice perfetta se è iniettiva, cioè per ogni u,v U: u v h(u) h(v) Deve essere U m Implementazione

Esempio Tavola hash con nomi di studenti aventi come chiavi numeri di matricola nell insieme U=[234717, 235717] Funzione hash perfetta: h(k) = k - 234717 n=100 m=1000 α = 0,1 = 10% L assunzione U m necessaria per avere una funzione hash perfetta è raramente conveniente (o possibile) 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 ) = h( N ) se volessimo inserire sia C and N nel dizionario avremmo una collisione! 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

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: Esempio Se U è l insieme dei numeri reali in [0,1] e ogni chiave ha la stessa probabilità di essere scelta, allora si può dimostrare che la funzione hash: soddisfa la proprietà di uniformità semplice Risoluzione delle collisioni Nel caso in cui non si possano evitare le collisioni, dobbiamo trovare un modo per risolverle. Due metodi classici sono i seguenti: 1. Liste di collisione. Gli elementi sono contenuti in liste esterne alla tabella: v[i] punta alla lista degli elementi tali che h(k)=i 2. Indirizzamento aperto. Tutti gli elementi sono contenuti nella tabella: se una cella è occupata, se ne cerca un altra libera

Liste di collisione Esempio di tabella hash basata su liste di collisione contenente le lettere della parola: PRECIPITEVOLIS SIMEVOLMENTE Implementazione 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)

Implementazione Metodi di scansione: scansione lineare Scansione lineare: c(k,i) = ( h(k) + i ) mod m per 0 i < m Esempio Inserimenti in tavola hash basata su indirizzamento aperto con scansione lineare delle lettere della parola: PRECIPITEVOLIS SIMEVOLMENTE 4,8 celle scandite in media per inserimento

Metodi di scansione: hashing doppio La scansione lineare provoca effetti di agglomerazione, cioè lunghi gruppi di celle consecutive occupate che rallentano la scansione L hashing doppio riduce il problema: c(k,i) = h 1 (k) + i h 2 (k) mod m per 0 i < m, h 1 e h 2 funzioni hash Esempio Inserimenti in tavola hash basata su indirizzamento aperto con hashing doppio delle lettere della parola: PRECIPITEVOLIS SIMEVOLMENTE 3,1 celle scandite in media per inserimento Analisi del costo di scansione Tempo richiesto in media da un operazione di ricerca di una chiave, assumendo che le chiavi siano prese con probabilità uniforme da U: dove α=n/m (fattore di carico)

Implementazione: cancellazione elementi con indirizzamento aperto Riepilogo 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