METODI DI ACCESSO (HASH)

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

INDICI PER FILE. Accesso secondario. Strutture ausiliarie di accesso

Strutture di accesso ai dati: B + -tree

METODI DI ACCESSO. (INDICI B + -Tree) indici 2

Organizzazioni hash. Corso di Basi di Dati e Sistemi Informativi

METODI DI ACCESSO (INDICI) indici 1

Tipi di indice. Indici. Leggere sezioni 13.1, 13.2 e 13.3 di Garcia- Molina et al. Tipi di strutture ad indice. ISAM: Indici primari

Organizzazione Fisica dei Dati (Parte II)

Databases. Architettura di un DBMS: Struttura ad indice per i files, B + -Trees

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

Strutture fisiche di accesso

ORDINE DI INSERIMENTO DELLE CHIAVI <35 >35

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

INTRODUZIONE INTRODUZIONE TABELLE HASH FUNZIONE HASH

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

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

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

Strutture fisiche e strutture di accesso ai dati

Sommario. Tabelle ad indirizzamento diretto e hash Funzioni Hash

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

Indici multilivello dinamici (B-alberi e B + -alberi) Alberi di ricerca - 1. Un esempio. Alberi di ricerca - 3. Alberi di ricerca - 2

Algoritmi e Strutture Dati

Tavole (o tabelle) hash

Memorizzazione di una relazione

Algoritmi e Strutture Dati

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

Algoritmi e Strutture Dati

Algoritmi e strutture dati

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

Strutture Dati per Inserimento Ordinato. Luca Abeni

Metodi di Join. Corso di Basi di Dati e Sistemi Informativi

Implementazione di dizionari

Corso di Informatica

laboratorio di python

TABELLE AD INDIRIZZAMENTO DIRETTO

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

Microsoft Access. Nozioni di base. Contatti: Dott.ssa Silvia Bonfanti

Hashing e indici multidimensionali

Sommario. Algoritmi di ordinamento lineari: CountingSort. BucketSort. RadixSort

La rappresentazione delle informazioni in un computer. La numerazione binaria

Organizzazione fisica dei dati: Gli Indici

ARITMETICA BINARIA. La somma viene eseguita secondo le regole per la somma di due bit, di seguito riportate:

5. Strutture di indici per file

Liste di Liste Matrici

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

Informatica/ Ing. Meccanica/ Ing. Edile/ Prof. Verdicchio/ 02/04/2014/ Appello straordinario/ Foglio delle domande / VERSIONE 1

COGNOME E NOME (IN STAMPATELLO) MATRICOLA

INFORMATICA 3 Prof.ssa Sara Comai

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

Organizzazione fisica dei dati

Fondamenti di Programmazione

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca.

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

Programmazione I - corso B a.a prof. Viviana Bono

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

Si può simulare una struttura di directory a multilivelli con una struttura di directory a singolo livello?"

SIMULAZIONE DELLA PROVA INTERMEDIA DEL CORSO DI CALCOLATORI ELETTRONICI

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

laboratorio di python

Esercizio 1. Si consideri il seguente frammento di FAT: Blocco Fisico - valore nella FAT. e di directory D1 : nome file - primo blocco A 32 B 36

Costanti e Variabili

Un ripasso di aritmetica: Conversione dalla base 10 alla base 2

Albero binario. Alberi binari (introduzione) Terminologia. Alberi di ricerca binaria (BST)

Array ( vettore/matrice Un dato strutturato. indice Accesso diretto

Massimo Benerecetti Tabelle Hash: gestione delle collisioni

Analogico vs. Digitale. LEZIONE II La codifica binaria. Analogico vs digitale. Analogico. Digitale

Struttura del Micro Filesystem (µfs)

Piccolo teorema di Fermat

Parte 1: tipi primitivi e istruzioni C

Rappresentazione dei numeri

Premessa. Input /output e gestione dei file. I file e gli stream. Il puntatore al file. 21. I FILE NEL LINGUAGGIO C Versione 1.

! 11.2! Silberschatz, Galvin and Gagne 2005! Operating System Concepts 7 th Edition, Jan 1, 2005!

Algoritmi e Strutture Dati

In questa lezione Strutture dati elementari: Pila Coda Loro uso nella costruzione di algoritmi.

Strutture Dati per Inserimento Ordinato

ORGANIZZAZIONE FISICA DEI DATI

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

Dizionario. Marina Zanella Algoritmi e strutture dati Tabelle hash 1

Liste concatenate. Violetta Lonati

Sistemi Operativi. Bruschi Martignoni Monga. File system Astrazioni utente Metadati Tecniche implementative. Sistemi Operativi

4 Le liste collegate 4.0. Le liste collegate. 4 Le liste collegate Rappresentazione di liste 4.1 Rappresentazione di liste

Ogni PC, per iniziare a lavorare, ha bisogno di un sistema operativo. Infatti questo è il primo programma che viene eseguito e che permette

Lezioni di Algebra Lineare con applicazioni alla Geometria Analitica Errata Corrige. Fulvio Bisi, Francesco Bonsante, Sonia Brivio

Argomenti della lezione. Introduzione agli Algoritmi e alle Strutture Dati. Lista Lineare. Lista Lineare come Tipo di Dato Astratto

Esercizi Capitolo 7 - Hash

Parte 4C. Liste ordinate. H. Matisse Dance I, 1909 H. Matisse Dance, B.1

Argomenti della lezione. Criteri di divisibilità fattorizzazione m.c.m. e M.C.D. frazioni ed espressioni

La codifica dei numeri

Gestione degli impegni Requisiti generali Si fissi come ipotesi che la sequenza di impegni sia ordinata rispetto al tempo,, e che ogni lavoratore abbi

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

Lista di esercizi 11 maggio 2016

Corso di Informatica

I B+ Alberi. Sommario

Massimo Benerecetti Tabelle Hash

Algoritmi e Strutture Dati. Capitolo 3 Strutture dati elementari

Gestione della Memoria Principale

Transcript:

METODI DI ACCESSO (HASH) hash 1 Nelle lezioni precedenti Avete visto: le caratteristiche delle principali unità di memoria permanente la struttura dei files il loro ordinamento Presenteremo: In questa lezione le caratteristiche principali dei metodi hash per l accesso alle tuple (record) hash 2

organizzazioni hash IDEA DI BASE : associare ad un file di NB blocchi una funzione che trasformi un valore di chiave k i in un numero di blocco b i tra 1 ed NB una tupla viene memorizzata nel blocco b i ad ogni blocco è associato un indirizzo nel DASD un blocco puo' contenere 1 o più tuple hash 3 organizzazioni hash La regola con cui ad una chiave k viene associato un numero di blocco b si chiama funzione hash o algoritmo di hashing. tupla : < chiave, informazione> HASH (chiave) = b b-1 b b+1 hash 4

organizzazioni hash Il file è ben utilizzato se: ci sono pochi spazi vuoti, cioè se il fattore di "packing (caricamento) è' elevato: Fp = m/m <1, dove: M = numero massimo di record per blocco, m = numero medio di record per blocco l occupazione effettiva dei blocchi è vicina alla media Fp basso sta a significare che il file è vuoto, Fp vicino ad 1 da significare che molti blocchi sono pieni. Con i blocchi pieni si creano problemi di OVERFLOW hash 5 organizzazioni hash Quando un blocco (es. b j ) è pieno ed una nuova tupla deve essere inserita poiché FH (f. hash) gli ha assegnato quel blocco (b j ) allora si deve creare una lista (catena) di overflow. FH tupla i tupla e bj bk o 1 o 2 bj bk bn bj tupla i bk tupla e File bk overflow hash 6

organizzazioni hash L'OVERFLOW avviene per due motivi: ci sono più tuple con lo stesso valore di chiave per cui FH le manda nello stesso blocco FH non è perfetta ed assegna a due o più valori di chiave diversi lo stesso blocco del file (collisione) con lunghe liste di overflow si degrada l'efficienza FH deve distribuire le tuple il più uniformemente possibile nei blocchi. Osserviamo che: più piccolo è il blocco rispetto alle tuple più è alto Fp ma più probabile è l'overflow, più grande è il blocco rispetto alle tuple più è basso Fp ma è meno probabile l'overflow. hash 7 metodi per la funzione Hash 1) MID-SQUARE: La chiave (convertita in numero se alfanumerica) è moltiplicata per se stessa ed i numeri centrali del quadrato vengono presi e normalizzati per rientrare nel "range" NB del numero di blocchi del file. ES: se un record ha una chiave di 6 cifre ed il file ha NB=7000 blocchi, il quadrato ha 12 cifre e si prendono le quattro dalla 5 a alla 8 a, se il numero è 172148, il quadrato è 029634933904 e le cifre centrali sono 3493. hash 8

metodi per la funzione Hash Per evitare che il numero così ottenuto sia maggiore di 7000, lo si normalizza moltiplicandolo per 7000/10000, cioè il numero del blocco che risulta è 0.7 x 3493 = 2445. I due numeri immediatamente precedenti e successivi danno: 172146 3224 2397 172147 3450 2415 172149 3527 2469 172150 3562 2493 Due valori successivi danno lo stesso blocco! hash 9 metodi per la funzione Hash 2) DIVISIONE La chiave K viene divisa per il numero primo più vicino ad NB ed il resto viene preso come numero del blocco Es. 172148 viene diviso per 6997 (numero primo più vicino < NB) ed il resto è 4220 172146 4218 172147 4219 172149 4221 172150 4222 Il metodo della divisione non è un "randomizzatore", ma assegna valori successivi di K a blocchi successivi. hash 10

metodi per la funzione Hash 3) SHIFTING Le cifre della chiave K vengono divise in due (o più) gruppi, vengono spostate in modo da sovrapporsi per un numero di cifre pari al numero di cifre che rappresentano NB blocchi, i frammenti di K vengono sommati ed il risultato viene normalizzato. Es: : 17207329 1720 7359 1720 + 7359 = 8 cifre 4 cifre per NB 9079 hash 11 metodi per la funzione Hash 4) FOLDING I frammenti vengono "ripiegati" (fold) su se stessi e poi sommati, le cifre in eccesso vengono eliminate ES.: 17207329 17 207 329 207 + 8 cifre 3 cifre 923 + 717 = 1847 847 SHIFTING e FOLDING vengono generalmente adoperati per chiavi alfa- numeriche molto lunghe hash 12

metodi per la funzione Hash Esempio: sequenza di 22 registrazioni di cui si evidenzia solo la chiave, da memorizzare in un archivio di 13 blocchi la cui capacità è 2. funzione hash: i caratteri della chiave vengono convertiti in numeri prendendo i primi 4 bit della codifica BCD, successivamente se la stringa numerica così ottenuta è più lunga di 5 la si spezza in gruppi di 5 a partire da sinistra e poi si sommano i gruppi, infine si divide il numero per 13 e si prende il resto della divisione. hash 13 DATI NUMERO RESTO (mod 13) 1 LUISA 34921 4 2 EDVIGE 54602 3 3 ADELE 14535 2 4 AGNESE 17557 8 5 FRANCESCA 74384 12 6 ROBERTA 96290 13 7 NOEMI 56549 13 8 ELENA 53551 5 9 LAURA 31491 6 10 BEATRICE 26074 10 11 DIANA 49151 12 12 IRENE 99555 2 13 PAOLA 71631 2 14 BERENICE 26890 7 15 VANESSA 51573 3 16 SARA 02191 8 17 CARLA 31931 10 18 OLGA 06371 2 19 GIORGIA 79788 8 20 LARA 03191 7 21 CAROLA 31964 11 22 GIOVANNA 80202 6 hash 14

indirizzo ARCHIVIO puntatore 1 2 ADELE IRENE 14 3 EDVIGE VANESSA 4 LUISA 5 ELENA 6 LAURA GIOVANNA 7 BERENICE LARA 8 AGNESE SARA 15 9 10 BEATRICE CARLA 11 CAROLA 12 FRANCESCA DIANA 13 ROBERTA NOEMI 14 PAOLA OLGA overflow record 15 GIORGIA overflow record Come si può vedere i blocchi 1 e 9 non vengono riempiti, mentre 2 ed 8 vanno in overflow. hash 15 COSA VUOL DIRE "METODO MIGLIORE"? Il metodo migliore è quello che distribuisce il più uniformemente possibile le tuple, evitando di riempire troppo alcuni blocchi lasciandone vuoti altri. In generale bisogna fare esperimenti e poi eventualmente cambiare funzione Hash e/o il numero di blocchi NB. Il metodo Mid-square e quello che più si avvicina ad un generatore di valori random. Il metodo della divisione è in generale il migliore perché "distribuisce" meglio le tuple. Per un FILE HASH si devono definire un numero NB di blocchi che costituiscono la " PRIME AREA " e NO per la " OVERFLOW AREA hash 16

overflow distribuito FH N blocchi overflow N blocchi overflow hash 17 overflow distribuito 1 blocco di overflow ogni N blocchi. Se non c è posto nel primo OB si carica la tupla nel successivo OB Questo metodo si attua quando il file system alloca al file molti cilindri di disco, allora per ogni cilindro di T tracce le prime T-1 contengono i blocchi del file e la T-esima contiene l overflow. Ciò consente di cercare in overflow evitando il più possibile di spostare il pettine di lettura. Sinonimi blocco: bucket, pagina tupla: record, n-pla hash 18

prestazioni hash 19 prestazioni hash 20

prestazioni Es.: 10000 tuple di 200 bytes con blocchi di 4096, capacità = 20 usando le curve del grafico si ha che: caricamento del 100% overflow al 17%, NB= 10000/200= 500, NO = 85, tot.= 585 C hash = 1 nel 83% dei casi 2 nel 17% caricamento del 70% overflow al 3%, NB= 10000/14=715, NO= 22, tot. = 737 C hash = 1 nel 97% dei casi 2 nel 3% hash 21 Metodo open addressing - Non ci sono blocchi di overflow. - I blocchi sono dimensionati con molta area vuota. - Se un blocco va in overflow il record viene messo nel primo blocco successivo con area disponibile. (NB va in overflow in 1) X Y Z K x x y x x z k x x x y z y 4 record per blocco hash 22

open addressing Prime area consecutive spill: il record viene posto nel blocco successivo Prime area skip spill: il record viene posto in un blocco a distanza prefissata. Non ci sono puntatori. La ricerca di un record parte dal blocco indirizzato da FH e poi segue in modo sequenziale fintanto che viene trovata una posizione vuota, se il record fosse stato presente sarebbe infatti stato posto nella prima posizione vuota disponibile. hash 23 open addressing Questo metodo poiché si basa sulla ricerca dei records fintanto che non si trova un "vuoto" non può rendere "vuoti" i records eliminati. I records eliminati vengono marcati come "non attivi" poiché servono alla ricerca dei successivi. I records marcati possono però venire utilizzati per accogliere nuovi records attivi. In conclusione ci sono 3 tipi di records: ATTIVI, NON ATTIVI, VUOTI Le prestazioni degradano per fattori di caricamento >60% hash 24

Hash dinamico LINEAR HASHING(1980) Scopi: Contenimento dell'area di overflow Crescita controllata del file Riorganizzazione automatica I metodi statici si fermano all esaurimento dell overflow, devono essere monitorati e ristrutturati in tempo aumentando NB e facendo il re-hash con un altro divisore o altra FH hash 25 Linear Hashing, metodo: ogni volta che un blocco (qualsiasi esso sia) va in overflow deposita il record in overflow effettua un block-split (partizionamento di un blocco). non effettua il block-split per il blocco andato in overflow, effettua automaticamente il block-split per il primo blocco (a partire dall inizio del file) che non ha ancora subito un block-split! (B j ). acquisisce un nuovo blocco successivo all'ultimo nel file e ridistribuisce i records B j (e del suo overflow) tra B j ed il blocco appena acquisito. hash 26

Linear hashing Non può fare direttamente il block-split del blocco andato in overflow (come nel B-tree) poiché dovrebbe in tal caso fare il re-hash del file, in quanto inserire un blocco vuol dire cambiare la numerazione i records in overflow vengono recuperati tutte le volte che si realizza un block split, risultati sperimentali riportano un overflow praticamente nullo per fattori di caricamento del 50% e dell'ordine del 5% per fattori di caricamento del 75%. hash 27 Linear hashing ALGORITMO Chiave del record : key (convertita in numero) Hash-range iniziale : M, meglio se primo. Numero blocchi iniziali: M0 M, M1 M I blocchi numerati da 0 ad M0-1. Funzione Hash H[key]: address key mod(m0) Split pointer: SP : numero del blocco del prossimo split hash 28

Begin {linear hashing} SP 0; Per ogni record : indirizzo H(key); if indirizzo >M1-1 then indirizzo indirizzo - M0/2; si inserisce il record; if record va in overflow allora begin M1 M1 + 1; si acquisisce il nuovo blocco B M1-1 ; se M1>M0 allora SP 0, M0 2 M0; si effettua il re-hash dei record contenuti in B SP e nell'overflow per B SP e si distribuiscono tra B SP e B M1-1 ; SP SP+1 end end {a} hash 29 Linear hashing 0 1 M0-1 M1-1 SP nuovo blocco area di overflow ESEMPIO. M0=7 : resti a 7 7 0, 14 0, 28 0, 21 0 0 1 6 hash 30

Linear hashing Supponiamo che avvenga un overflow (in questo caso M1>M0), allora M0 14, si fa il re-hash dei record nel blocco 0 con resto a 14: 7 7, 14 0, 28 0, 21 7 0 1 6 7 il test {a} fa in modo che non si alterino gli altri nuovo indirizzi: 13 13 13-7 6 15 1 26 12 12-7 5 9 9 9-7 2 Facendo lo split ed il re-hash i valori delle key vengono modificati, quindi quando raddoppio di nuovo M, il test {a} va fatto solo sui nuovi record e non sui vecchi che sono stati già modificati. hash 31 extendible hashing L'extendible hashing è un metodo di hash dinamico che usa una struttura dati ausiliaria, fu proposto da Fagin (IBM) nel 79. Nello schema extendible hashing l'archivio è strutturato in due livelli : un indice e l'area dati composta da NB blocchi. Si suppone che l'indice possa in generale essere contenuto in memoria centrale e che quindi influisca in modo poco rilevante sul tempo di accesso all'archivio. hash 32

extendible hashing L'indice è composto di coppie <valore, puntatore >: il valore è costituito da d bit, il puntatore indirizza un blocco nell'area dati, d è chiamato "profondità dell'indice", l'indice è costituito da P = 2 d puntatori che puntano agli NB blocchi con P NB, i puntatori non sono necessariamente tutti distinti, ma se vi sono più puntatori allo stesso blocco essi sono 2 q con q<d, in questo caso si dice che il blocco ha profondità locale d'=d-q. Poiché i valori sono sempre un numero p potenza di 2 non c è bisogno di memorizzarli. hash 33 extendible hashing INDICE 000 001 010 011 100 101 110 111...00 d = 3...010 d = 3...110 profondità: d= 3...1 d = 1 AREA DATI hash 34

extendible hashing La ricerca di un record di chiave K avviene in due passi: 1 K viene trasformata dalla funzione Hash nella chiave hash H, si estrae da H un suffisso S (prefisso) costituito dai primi d bit a partire da destra (sinistra), con S si cerca nell'indice e si trova il valore corrispondente; 2 si estrae il puntatore, si accede al blocco indirizzato e si cerca il record con chiave K. hash 35 extendible hashing Inserimento di un record di chiave K: si cerca il blocco dove inserirlo come nel caso della ricerca, se il blocco è saturo si possono avere due casi: 1 il blocco ha una profondità locale d'<d, allora si acquisisce un nuovo blocco, si aumenta d' di 1, si distribuiscono i vecchi ed il nuovo record tra il vecchio ed il nuovo blocco sulla base della differenziazione creata dal nuovo bit del suffisso(0/1) e si aggiornano i puntatori che puntavano al vecchio blocco. hash 36

extendible hashing INDICE 000 001 010 011 100 101 110 111 profondità': d= 3...00...010...110...01 d = 3 d = 3 AREA DATI...11 hash 37 extendible hashing 2 il blocco ha profondità d, allora si acquisisce un nuovo blocco, si aumenta di 1 la profondità d dell'indice, si ridistribuiscono i vecchi ed il nuovo record sulla base della differenziazione creata dal nuovo bit del suffisso(0/1) e si ricostruisce l'indice raddoppiandolo (passa da 2 d-1 a 2 d puntatori). In seguito a cancellazioni, in caso di svuotamento parziale o totale di blocchi, possono essere fusi due blocchi che si differenziano per l'ultimo bit del suffisso e l'indice può essere contratto. hash 38

extendible hashing raddoppio INDICE...00 0000 0001 0010 d = 4..0010 0011 0100 0101 d = 3 0110...110 0111 1000 1001...01 1010 1011 1100...11 1101 1110 1111 d = 4..1010 AREA DATI profondità: d= 4 hash 39 extendible hashing: costruzione capacità del blocco= 2 S1= 00011110 S2= 11010001 d = 0 passo 0 vuoto passo 1 S1 d = 0 passo 2 S1 S2 hash 40

extendible hashing: costruzione S1= 00011110 S2= 11010001 S3= 00111100 S4= 11000011 passo 3 0 1 S1 S3 S2 d = 1 d = 1 passo 4 0 1 S1 S3 S2 S4 d = 1 d = 1 hash 41 extendible hashing: costruzione passo 5 S5= 11001010 S3 00 01 10 11 S2 S4 S1 S5 d = 1 S6= 11001001 S3 passo 6 00 01 10 11 S2 S6 S1 S5 S4 hash 42