Esercizi Capitolo 7 - Hash

Documenti analoghi
Esercizi Capitolo 10 - Code con priorità e insiemi disgiunti

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

Esercizi Capitolo 10 - Code con priorità e insiemi disgiunti

Esercizi vari. Alberto Montresor. 19 Agosto, 2014

Esercizi Capitolo 11 - Strutture di dati e progettazione di algoritmi

Analisi dell Hashing

Esercizi Capitolo 6 - Alberi binari di ricerca

Risoluzione delle collisioni con indirizzamento aperto

Implementazione di dizionari

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

INTRODUZIONE INTRODUZIONE TABELLE HASH FUNZIONE HASH

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

Massimo Benerecetti Tabelle Hash: gestione delle collisioni

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

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

TABELLE AD INDIRIZZAMENTO DIRETTO

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.

Algoritmi e Strutture Dati

Dizionario. Marina Zanella Algoritmi e strutture dati Tabelle hash 1

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati

Algoritmi e strutture dati

Sommario. Tabelle ad indirizzamento diretto e hash Funzioni Hash

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

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

Algoritmi e Strutture Dati

Organizzazioni hash. Corso di Basi di Dati e Sistemi Informativi

Esercizi Capitolo 12 - Divide-et-Impera

Tavole (o tabelle) hash

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

Algoritmi e strutture dati

Algoritmi e Strutture Dati

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

Organizzazione Fisica dei Dati (Parte II)

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

Esercizi Capitolo 5 - Alberi

Algoritmi di Ricerca. Esempi di programmi Java

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

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

Algoritmi e Strutture Dati

Algoritmi di Ricerca. Esempi di programmi Java

Fondamenti di Informatica. Algoritmi di Ricerca e di Ordinamento

Grafi: visita generica

ADT Dizionario. Come nella Mappa: Diversamente dalla Mappa:

Divide et impera (Divide and Conquer) Dividi il problema in sottoproblemi piu` semplici e risolvili ricorsivamente

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

Algoritmi e Strutture Dati

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

Strutture di accesso ai dati: B + -tree

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

Strutture di accesso ai dati: B + -tree

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

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

Algoritmi e Strutture Dati. Hashing

Appunti lezione Capitolo 13 Programmazione dinamica

Calcolare il massimo di una lista

Dati e Algoritmi I (Pietracaprina) Esercizi sul Text Processing

Nell informatica esistono alcuni problemi particolarmente rilevanti, poiché essi:

Informatica Generale Andrea Corradini Gli algoritmi e la risoluzione di problemi

Tabelle hash. Vittorio Maniezzo - Università di Bologna

Look up table, caso generale

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

ISTRUZIONI A B K A, B, K A<B? SI A<B? SI A<B? SI

Algoritmi e Strutture Dati. Hashing

Spesso sono definite anche le seguenti operazioni:

Algoritmi e Strutture Dati

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

Algoritmi e Strutture Dati. Hashing

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

Algoritmi e Strutture Dati. Hashing

GARA5 SECONDARIA DI SECONDO GRADO INDIVIDUALE

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

Definizione informale

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

FILE E INDICI Architettura DBMS

INFORMATICA 3 Prof.ssa Sara Comai

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

Programmazione Procedurale in Linguaggio C++

Algoritmi e Strutture Dati 03/05/2013

Algoritmi e Strutture Dati. Capitolo 3 Strutture dati elementari

Grafi (non orientati e connessi): minimo albero ricoprente

COGNOME E NOME (IN STAMPATELLO) MATRICOLA

Esercizi su array di array

Algoritmi e Strutture Dati

Algoritmi Greedy. Tecniche Algoritmiche: tecnica greedy (o golosa) Un esempio

Dizionari. Hashtables.

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

Le liste. Prof. Francesco Accarino IIS Sesto San Giovanni Via Leopardi 132

La struttura dati CODA

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

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

Lauree scientifiche Crittografia. RSA CRT

ORDINE DI INSERIMENTO DELLE CHIAVI <35 >35

UNIVERSITA DEGLI STUDI DI PERUGIA

Quick Sort. PARTITION(A,p,r) risistema il sottoarray A[p...r] e riporta l indice q:

Transcript:

Esercizi Capitolo 7 - Hash Alberto Montresor 19 Agosto, 2014 Alcuni degli esercizi che seguono sono associati alle rispettive soluzioni. Se il vostro lettore PDF lo consente, è possibile saltare alle rispettive soluzioni tramite collegamenti ipertestuali. Altrimenti, fate riferimento ai titoli degli esercizi. Ovviamente, si consiglia di provare a risolvere gli esercizi personalmente, prima di guardare la soluzione. Per molti di questi esercizi l ispirazione è stata presa dal web. In alcuni casi non è possibile risalire alla fonte originale. Gli autori originali possono richiedere la rimozione di un esercizio o l aggiunta di una nota di riconoscimento scrivendo ad alberto.montresor@unitn.it. 1 Problemi 1.1 Inserimento in tabella hash (Esercizio 7.2 del libro) Si consideri una tabella hash di dimensione m = 11 inizialmente vuota. Si mostri il contenuto della tabella dopo aver inserito nell ordine, i valori 33, 10, 24, 14, 16, 13, 23, 31, 18, 11, 7. Si assuma che le collisioni siano gestite mediante indirizzamento aperto utilizzando come funzione di hash h(k), definita nel modo seguente: h(k) = (h (k) + 3i + i 2 ) mod m h (k) = k mod m Mostrare il contenuto della tabella al termine degli inserimenti e calcolare il numero medio di accessi alla tabella per la ricerca di una chiave presente nella tabella. Soluzione: Sezione 2.1 1.2 Scansione lineare e quadratica (Esercizio 7.4 del libro) Si forniscano procedure per realizzare i metodi di scansione lineare e quadratico. Soluzione: Sezione 2.2 1.3 Confronto file (Esercizi 7.6, 7.9 del libro) Supponete di avere un albero di directory, contenenti un numero n di file, alcuni dei quali potrebbero essere replicati una o più volte, sotto nomi e percorsi diversi. Il vostro compito è elencare tutti i file replicati (ovvero, con lo stesso contenuto e la stessa lunghezza). Proponente un metodo efficiente (O(n)) per risolvere questo problema. Soluzione: Sezione 2.3 1

1 PROBLEMI 2 1.4 Liste di trabocco ordinate (Esercizio 7.10 del libro) Supponiamo di mantenere ordinate le liste di trabocco. Quali sono i vantaggi e/o svantaggi di tale scelta in termini di efficienza? Soluzione: Sezione 2.4 1.5 Hashing perfetto Problema: dato un insieme di chiavi statiche (che non cambiano nel tempo), realizzare una tabella hash (o una struttura simile) il cui costo di ricerca sia O(1) nel caso pessimo. Possibili utilizzazioni: per esempio, la tabella dei file di un cd-rom. Soluzione: Sezione 2.5

2 SOLUZIONI 3 2 Soluzioni 2.1 Inserimento in tabella hash (Esercizio 7.2 del libro) La tabella hash è composta nel modo seguente: 0 1 2 3 4 5 6 7 8 9 10 33 23 24 14 11 16 13 18 31 10 Il valore 7 non può essere inserito, perché la funzione di scan scorre 11 posizioni (molte ripetute) e non trova l unica cella libera rimasta (la 8). Il numero di accessi medi è 1.2 per i valori che hanno trovato collocazione. 2.2 Scansione lineare e quadratica (Esercizio 7.4 del libro) È sufficiente modificare la funzione scan(). La versione per la scansione lineare è la seguente: integer scan(item k, boolean insert) integer c m % Prima posizione deleted integer i 0 % Numero di ispezione integer H(k) % Posizione attuale while A[] k and A[] nil and i < m do if A[] = deleted and c = m then c i i + 1 (H(k) + h i) mod m if insert and A[] k and c < m then c return Quella per la scansione quadratica è la seguente: integer scan(item k, boolean insert) integer c m % Prima posizione deleted integer i 0 % Numero di ispezione integer H(k) % Posizione attuale while A[] k and A[] nil and i < m do if A[] = deleted and c = m then c i i + 1 (H(k) + h i 2 ) mod m if insert and A[] k and c < m then c return 2.3 Confronto file (Esercizi 7.6, 7.9 del libro) È possibile calcolare una funzione hash sul contenuto di tutti i file. Una possibile funzione per questo scopo potrebbe essere SHA-1, una funzione hash crittografica che produce chiavi di 160 bit. Questo richiede la lettura di n file. A questo punto, si confrontano le chiavi SHA-1(in tempo O(n log n), oppure in tempo O(n) inserendole in una tabella hash), e si verificano solo file che hanno lo stesso valore di chiave SHA-1. La possibilità di collisione con 160 bit è molto bassa.

2 SOLUZIONI 4 2.4 Liste di trabocco ordinate (Esercizio 7.10 del libro) Il vantaggio è che quando si cerca un elemento, è possibile fermarsi non appena si trova un elemento maggiore o uguale dell elemento cercato, invece di arrivare in fondo alla lista in caso di assenza. L operazione di inserimento, che richiede comunque di cercare un elemento nella lista, può essere implementata allo stesso costo. 2.5 Hashing perfetto Alcune definizioni: sia p un numero primo; sia Z p = [0... p 1]; sia Z p = [1... p 1]; m una costante che rappresenta la dimensione della tabella hash (di primo livello). p deve essere sufficientemente grande da fare sì che Z p possa contenere l universo delle possibili chiavi: U Z p. Definiamo una classe di funzioni hashing in questo modo: dove H p,m = {h p,m a,b a, b Z p} h p,m a,b (k) = ((ak + b) mod p) mod m Questo insieme è un classe universale di funzioni hash: questo significa che per ogni coppia di chiavi distinte k, l, il numero di funzioni hash h H p,m tali per cui h(k) = h(l) è al massimo H p,m /m. In altre parole, non esistono coppie di chiavi che generano più collisioni di altre. Teorema 1. Se memorizziamo n chiavi in una tabella hash con m = n 2 slot utilizzando una funzione hash h scelta a caso da una classe universale di funzioni hash, la probabilità che si verifichi una collisione è minore di 1/2. Dimostrazione. Ci sono ( n 2) coppie di chiavi che possono collidere, ognuna con probabilità 1/m, se h è scelta a caso da una famiglia universale di funzioni hash. Quindi, detta X una variabile casuale che conta il numero di collisioni, abbiamo: E[X] = ( ) n 1 2 n 2 = n(n 1) 2 < 1/2 Per la disequezione di Markov, P r{x t} E[X]/t, con t = 1, si conclude la dimostrazione. Notate che n può essere troppo grande per essere portato al quadrato; per questo motivo, si utilizza uno schema a due livelli. Si utilizza una prima funzione tabella h grande quanto il numero di chiavi (n = m); questo genererà un certo numero di collisioni; sia n il numero di chiavi in collisione per l indice (con 1 m). Invece di puntatore ad una lista di concatenamento, i puntatori della tavola hash di primo livello puntano a n tavole hash di secondo livello; la tavola dell indice è grande n 2. Se la funzione hash di primo livello è stata ben scelta, i valori n sono relativamente bassi. A questo punto, si procede in questo modo: per ogni indice 1 m, si sceglie a caso una funzione h p,n 2 da H p,n 2 e la utilizziamo per gestire una tabella hash A [1... n 2 ]. Se nella tabella secondaria non ci sono collisioni, memorizziamo le caratteristiche di h p,n 2 assieme alla tabella hash A. Altrimenti, proviamo una nuova funzione hash casuale finché non ne troviamo una senza collisioni. 1 n 2

2 SOLUZIONI 5 È possibile dimostrare, ma non lo faremo qui, che scegliendo a caso una funzione da una classe universale per l hashing di primo livello, la dimensione totale attesa delle sottotabelle è [ n 1 ] E < 2n =0 n 2