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

Slides:



Advertisements
Presentazioni simili
Algoritmi e Strutture Dati
Advertisements

LINGUAGGIO DI PROGRAMMAZIONE C
Tecnologia delle basi di dati: Strutture fisiche di accesso
Estendere i linguaggi: i tipi di dato astratti
Sistemi di numerazione e codici
Lez. 131 Universita' di Ferrara Facolta' di Scienze Matematiche, Fisiche e Naturali Laurea Specialistica in Informatica Algoritmi Avanzati Rappresentazione.
Realizzazione del file system
Hash Tables Indirizzamento diretto Tabelle Hash
Hash Tables Indirizzamento diretto Tabelle Hash Risoluzioni di collisioni Indirizzamento aperto.
Realizzazione del file system
Alberi binari di ricerca
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.
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 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.
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:
Il problema del dizionario
Capitolo 7 Tavole hash Algoritmi e Strutture Dati.
Capitolo 7 Tavole hash Algoritmi e Strutture Dati.
Algoritmi e Strutture Dati Alberi Binari di Ricerca.
Hashing.
Hashing.
07/04/2003Algoritmi Ricerca in una sequenza di elementi Data una sequenza di elementi, occorre verificare se un elemento fa parte della sequenza oppure.
Tabelle hash.
Tecniche HASH Corso (B) di Programmazione CDL in Informatica I livello A.A DIB - Università di Bari dal materiale didattico (aa ) di.
memoria gestita staticamente:
I File.
Algoritmi e Programmazione Avanzata
Tavole dinamiche Spesso non si sa a priori quanta memoria serve per memorizzare dei dati in un array, in una tavola hash, in un heap, ecc. Può capitare.
RAPPRESENTAZIONE DELL'INFORMAZIONE
Metodo della moltiplicazione
Strutture dati per insiemi disgiunti
Radix-Sort(A,d) // A[i] = cd...c2c1
Hashing.
Passo 3: calcolo del costo minimo
Ispezione lineare La funzione hash h(k,i) si ottiene da una funzione hash ordinaria h'(k) ponendo L’esplorazione inizia dalla cella h(k,0) = h'(k) e continua.
Per valutare la complessità ammortizzata scomponiamo ogni Union: nelle due FindSet e nella Link che la costituiscono e valuteremo la complessità in funzione.
Basi di Dati e Sistemi Informativi
Capitolo 3 Strutture dati elementari Algoritmi e Strutture Dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano.
ECDL Patente europea del computer
I sistemi di numerazione
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.
Rappresentazione dell’informazione nel calcolatore.
Heap concetti ed applicazioni. maggio 2002ASD - Heap2 heap heap = catasta condizione di heap 1.albero binario perfettamente bilanciato 2.tutte le foglie.
Esercitazione su Vector. Permette di definire collezioni di dati generiche, che sono in grado di memorizzare elementi di ogni sottotipo di Object Definito.
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
Risoluzione delle collisioni con indirizzamento aperto Con la tecnica di indirizzamento aperto tutti gli elementi stanno nella tavola. La funzione hash.
Ordinamento in tempo lineare Il limite inferiore Ω(n log n) vale per tutti gli algoritmi di ordinamento generali, ossia per algoritmi che non fanno alcuna.
Algoritmi e Strutture Dati
Archivi Esempi Movimenti contabili di un’azienda
Algoritmi e Strutture Dati
Il problema della ricerca Algoritmi e Strutture Dati.
1 Analisi ammortizzata Si considera il tempo richiesto per eseguire, nel caso pessimo, una intera sequenza di operazioni. Se le operazioni costose sono.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Capitolo 4 Ordinamento:
Capitolo 7 Tavole hash Algoritmi e Strutture Dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano.
Esercitazione del 9 marzo 2007 Ereditarieta’. Richiami Definire sottoclassi (ereditarieta’) Overriding Specificatori di accesso (private, protected) Principio.
La codifica dei numeri.
Esercizi.
Informatica Lezione 3 Psicologia dello sviluppo e dell'educazione (laurea magistrale) Anno accademico:
Complessità Computazionale
Codifica dei numeri Il codice ASCII consente di codificare le cifre decimali da “0” a “9” fornendo in questo modo una rappresentazione dei numeri Per esempio:
Capitolo 10 Tecniche algoritmiche Algoritmi e Strutture Dati.
“ Pseudocodice ” Un programma per computer lavorerà su in insieme di “ variabili ” contenenti i dati del problema, soluzioni intermedie, soluzioni finali.
Informatica Problemi e algoritmi. una situazione che pone delle domande cui si devono dare risposte. Col termine problema o situazione problematica s’indica.
Transcript della presentazione:

Hashing

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

Hashing3 Richiamo sul concetto di dizionario Insieme di coppie del tipo Le chiavi appartengono a un insieme totalmente ordinato Operazioni: insert(el, key) delete(key) search(key)

Hashing4 Tabelle hash Adatte per realizzare dizionari Generalizzazione del concetto di array Importanti nell’accesso a dati su memoria secondaria Gli accessi avvengono a memoria secondaria Costo degli accessi predominante Indirizzamento diretto: si associa ad ogni valore della chiave un indice di un array – ricerca in tempo O(1) Problemi?

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

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

Hashing7 Tabella hash Dato l’insieme base di un dizionario: T è una tabella h: K  {0,...,N-1} K insieme delle possibili chiavi {0,...,N-1} insieme delle posizioni nella tabella

Hashing8 Funzioni hash perfette e collisioni Funzione hash perfetta: k 1 !=k 2  h(k 1 ) != h(k 2 ) Richiede N >= |K| Raramente ragionevole in pratica In generale N < |K| (spesso N << |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}

Hashing9 Requisiti di una funzione hash Uniformità semplice: Pr[h(k)=j] ~ 1/|K| 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é?

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

Hashing11 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

Hashing12 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 0 =240 Ascii(‘p’)=112Ascii(‘t’)=116

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

Hashing14 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)

Hashing15 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:  {477, 264, 537, 348} 2. f(477,264,537,348) = ( )mod 701 = 224

Hashing16 Estrazione Si usa soltanto una parte della chiave per calcolare l’indirizzo Esempio: 6 cifre centrali del numero di carta di credito  Il numero ottenuto può essere ulteriormente manipolato L’indirizzo può dipendere da una porzione della chiave

Hashing17 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

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

Hashing19 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))

Hashing20 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

Hashing21 Inserimento insert (el, k) { /* T denota la tabella */ i=0; while (h(k, i) && (i<|T|)) i++; if (i < |T|) else }

Hashing22 Ricerca search (k) { /* T denota la tabella */ i=0; while ((k!=key(T[h(k, i)])) && (i<|T|)) i++; if (i < |T|) else }

Hashing23 Cancellazione delete (k) { /* T denota la tabella */ search(k); if ( ) }

Hashing24 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

Hashing25 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

Hashing26 Agglomerazione primaria h(k, i) = (h’(k)+i) mod 101, h’(k)=k mod {2, 103, 104, 105,....} Caso estremo, ma il problema esiste

Hashing27 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|

Hashing28 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

Hashing29 Hashing estendibile E’ usato nella gestione di file, la cui dimensione può variare. Es.: file ad accesso diretto Il file è organizzato in bucket, ciascuno dei quali ha una dimensione fissa Gli indirizzi sono associati ai bucket La funzione hash restituisce in questo caso un puntatore al bucket

Hashing30 Hashing estendibile/2 h(k) restituisce una stringa binaria b I bit più significativi di b sono usati per determinare l’indirizzo del bucket Lungh. locale 2 Indice Lungh. globale Bucket 00 Bucket 01 Bucket 1 File h(k)=11001

Hashing31 Esempio Indice Bucket 00 Bucket 01 Bucket 1 File Indice Bucket 0 Bucket 1 File h(k)=00101 Dim. Bucket =

Hashing32 H. estendibile - Inserimento extHashInsert (el, k) { /* L=lunghezza globale */ str=h(k); /* LS= lunghezza str */ p=indice[pattern[LS-1...LS-L]]; if (<Bucket puntato da p non pieno) else { /* l=lunghezza locale bucket*/ l++; } if (l > L) L++; }