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

Documenti analoghi
INTRODUZIONE INTRODUZIONE TABELLE HASH FUNZIONE HASH

Esercizi Capitolo 7 - Hash

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

Massimo Benerecetti Tabelle Hash: gestione delle collisioni

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

Algoritmi e Strutture Dati

Dizionario. Marina Zanella Algoritmi e strutture dati Tabelle hash 1

Sommario. Le strutture dati elementari per implementare sequenze: Vettori Liste

Due numeri naturali non nulli a, b tali che MCD(a,b) = 1 si dicono coprimi o relativamente primi.

Piccolo teorema di Fermat

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

I termini dell operazione sono: la base, l esponente e il valore della potenza: DOVE 4 è la base 3 è l esponente 64 è il valore della potenza

Indirizzamento Aperto

AMBIENTE EXCEL CALCOLO DEL RESTO DELLA DIVISIONE FRA NATURALI

Lezione 3 - Teoria dei Numeri

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

0 Insiemi, funzioni, numeri

Piano annuale di lavoro anno scolastico classe quinta Corsi Giunti Scuola Annarita Monaco PROGETTAZIONE DIDATTICA.

4.1 Modelli di calcolo analisi asintotica e ricorrenze

Elementi di Algebra e di Matematica Discreta Numeri interi, divisibilità, numerazione in base n

PROGRAMMA A.S. 2014/2015

Il problema delle azioni

Permutazioni. 1 Introduzione

Sommario. Tabelle ad indirizzamento diretto e hash Funzioni Hash

Problemi, istanze, soluzioni

= < < < < < Matematica 1

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

Fondamenti di Informatica. Algoritmi di Ricerca e di Ordinamento

Curricolo verticale MATEMATICA

SISTEMI LINEARI. x y + 2t = 0 2x + y + z t = 0 x z t = 0 ; S 3 : ; S 5x 2y z = 1 4x 7y = 3

1 Multipli di un numero

Lezione 4. Problemi trattabili e soluzioni sempre più efficienti. Gianluca Rossi

Correttezza (prima parte)

INDICI PER FILE. Accesso secondario. Strutture ausiliarie di accesso

Algoritmi di Ricerca. Esempi di programmi Java

4 0 = 4 2 = 4 4 = 4 6 = 0.

PREPARAZIONE ALLE GARE DI MATEMATICA - CORSO BASE

623 = , 413 = , 210 = , 203 =

Classi: Prime IA; IB; IC; ID; IE; IF Disciplina: MATEMATICA Ore settimanali previste: 4

Stage di preparazione olimpica - Lucca

Alberi binari di ricerca

Gli insiemi N, Z e Q. I numeri naturali

Esercizi Capitolo 11 - Strutture di dati e progettazione di algoritmi

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

La codifica digitale

Università degli Studi di Roma Tor Vergata. Principio di induzione matematica

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

Lezione 12 Tabelle Hash

La fattorizzazione e la phi di Eulero

Individuazione di sottoproblemi

DECLINAZIONE COMPETENZE SCUOLA SECONDARIA DI PRIMO GRADO: MATEMATICA COMPETENZE CONOSCENZE ABILITA

TEORIA DEI NUMERI. 1. Numeri naturali, interi relativi e principi d induzione

dipendenti. Cosa possiamo dire sulla dimensione di V?

Ingegneria degli Algoritmi (II parte pratica)

LEZIONE i i 3

SCOMPOSIZIONE IN FATTORI PRIMI:

Vediamo come risolvere un problema di PL con Excel. Riprendiamo un esercizio già visto.

Laboratorio di Python

IL TEOREMA FONDAMENTALE DELL ARITMETICA: DIMOSTRAZIONE VELOCE.

Ordinamenti per confronto: albero di decisione

RENDITE. Ricerca del tasso di una rendita

Appunti di Excel per risolvere alcuni problemi di matematica (I parte) a.a

Esercitazione. Ricorsione. May 31, Esercizi presi dal libro di Rosen

1 Multipli e sottomultipli. Divisibilità

ADT Dizionario. Come nella Mappa: Diversamente dalla Mappa:

Algoritmi di ricerca. Per ricerca si intende qui il procedimento di localizzare una particolare informazione in un elenco di dati.

Appunti di informatica. Lezione 7 anno accademico Mario Verdicchio

LICEO SCIENTIFICO - OPZIONE DELLE SCIENZE APPLICATE MATEMATICA

DETERMINAZIONE DEL MASSIMO E DEL SECONDO MASSIMO DI n OGGETTI?

Il problema dello zaino

Tempo e spazio di calcolo (continua)

Progettazione di algoritmi

Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica Curriculum SR (Sistemi e Reti) Algoritmi e Laboratorio a.a.

Il concetto delle equazioni reciproche risale ad A. De Moivre ( ) ed il nome è dovuto a L. Euler ( ).

Fattorizzazione di interi e crittografia

Cammini minimi fra tutte le coppie

Esercizi per il corso di Architettura dei Calcolatori. Anno accademico 2008/09. Si prevede l utilizzo dell emulatore Eniac ( presentato a lezione )

Introduciamo ora un altro campo, formato da un numero finito di elementi; il campo delle classi resto modulo n, con n numero primo.

TEOREMA DEL RESTO E REGOLA DI RUFFINI

Somma di numeri binari

Tipo di dato Dizionario

nota 1. Aritmetica sui numeri interi.

Capitolo 11 Test chi-quadro

Analisi ammortizzata (Tarjan in 1985)

PROGRAMMAZIONE DISCIPLINARE

PROGRAMMAZIONE STRUTTURATA

FILE E INDICI Architettura DBMS

Corso di Informatica Generale (C. L. Economia e Commercio) Ing. Valerio Lacagnina Rappresentazione dei numeri relativi

LEZIONE 15. (15.1.2) p(x) = a 0 x n + a 1 x n a n 1 x + a n = a h x n h.

Lezione 9 Alberi binari di ricerca

Soluzione. Soluzione. Soluzione. Soluzione

Soluzione esercizi Gara Matematica 2009

1 Relazione di congruenza in Z

Espressione di chiamata di funzione

Strutture fisiche di accesso

Progettazione di Algoritmi: Approccio Top-Down e Bottom Up

z =[a 4 a 3 a 2 a 1 a 0 ] 10

DIVISIBILITA, DIVISORI E MULTIPLI. Conoscenze

Compitino di Laboratorio di Informatica CdL in Matematica 13/11/2007 Teoria Compito A

PROGRAMMAZIONE DINAMICA. Prof. Reho Gabriella Olimpiadi di Informatica

Transcript:

Algoritmi 2 - Dr. Simone Faro - Esercizi sulle Tabelle Hash 1 1. Supponete di effettuare una ricerca in una lista concatenata di lunghezza n, dove ogni elemento contiene una chiave k ed un valore hash h(k). Ogni chiave é una lunga stringa di caratteri. Come potreste trarre vantaggio dai valori hash quando ricercate nella lista un elemento con una data chiave? Proporre una procedura che effettui la ricerca di una chiave in maniera efficiente. Supponiamo di avere una lista concatenata in cui ogni elemento, x, contiene una chiave key[x] = [0, 1,..., n 1], consistente in una lunga stringa di caratteri ed una campo valore hash denominato hash[x], associato alla chiave key[x]. Il valore hash puó essere utilizzato per ricercare in modo efficiente una chiave k all interno della lista concatenata. Dato che x = y hash[x] = hash[y] possiamo confrontare esclusivamente le stringhe degli elementi x per cui hash[x] = hash[k]. Hash-List-Search(L) h hash(k) x Head[L] while (x NULL) do if (hash[x] = h) then if key[x] = k then return x x next[x] return NULL

Algoritmi 2 - Dr. Simone Faro - Esercizi sulle Tabelle Hash 2 2. Considerate una variante del metodo della divisione i cui h(k) = k mod m, dove m = 2 p 1 e k é una stringa di caratteri interpretata come un numero con base 2 p. Dimostrate che, se la stringa x puó essere ottenuta dalla stringa y permutando i suoi caratteri, allora le stringhe x e y sono indirizzate nella medesima cella. Indicate un applicazione nella cui funzione hash non sarebbe desiderabile questa proprietá. Si supponga che una chiave k sia una stringa di n caratteri interpretata come un numero in base 2 p. Generallizando possiamo porre k = [c 1, c 2, c 3,..., c n ]. Il valore numerico, V k, a cui la chiave k é associato viene dato dalla formula V k = c 1 (2 p ) n 1 + c 2 (2 p ) n 2 + c 3 (2 p ) n 3 +... + c n 1 (2 p ) + c n c 1 2 p(n 1) + c 2 2 p(n 2) + c 3 2 p(n 3) +... + c n 1 2 p + c n Si puó facilmente dimostrare che, i > 0, 2 pi mod 2 p 1 = 1. Questo infatti si riduce a dimostrare che il valore 2 ip 1 é divisibile per 2 p 1. Applicando la proprietá delle serie geometriche si ottinene infatti (2 p ) i i 1 1 2 p 1 = (2 p ) i = 1 + 2 p + 2 2p +... + 2 p(i 1) i=0 che é chiaramente un valore intero. Infine applicando le due seguenti proprietá del modulo 1) (a + b) mod c = ((a mod c) + (b mod c)) mod c 2) a mod c = b xa mod c = xb mod c si ottine la sueguente relazione che dimostra la tesi V k mod m = ((c 1 2 p(n 1) mod m) +... + (c n 1 2 p mod m) + (c n mod m)) mod m = ((c 1 mod m) + (c 2 mod m) +... + (c n 1 mod m) + (c n mod m)) mod m = (c 1 + c 2 +... + c n 1 + c n ) mod m

Algoritmi 2 - Dr. Simone Faro - Esercizi sulle Tabelle Hash 3 3. Considerate una tavola hash di dimensione m = 1000 e una corrispondente funzione hash h(k) = m(ka mod 1) per A = ( 5 1)/2. Calcolate le celle in cui saranno mandate le chiavi 61, 62, 63, 64 e 65. ( 5 1)/2 = (2, 236 1)/2 = 1, 236/2 = 0, 618 h(61) = 1000(61 0, 618 mod 1) = 1000(37, 698 mod 1) = 1000(0, 698) = 698 h(62) = 1000(62 0, 618 mod 1) = 1000(38, 316 mod 1) = 1000(0, 316) = 316 h(63) = 1000(63 0, 618 mod 1) = 1000(38, 934 mod 1) = 1000(0, 934) = 934 h(64) = 1000(64 0, 618 mod 1) = 1000(39, 552 mod 1) = 1000(0, 552) = 552 h(65) = 1000(65 0, 618 mod 1) = 1000(40, 17 mod 1) = 1000(0, 17) = 170

Algoritmi 2 - Dr. Simone Faro - Esercizi sulle Tabelle Hash 4 4. Supponete di inserire le chiavi 10, 22, 31, 4, 15, 28, 17, 88, 59 in una tavola hash di lunghezza m = 11 utilizzando l indirizzamento aperto con la funzione hash ausiliaria h (k) = k mod m. Illustrate il risultato dell inserimento di queste chiavi utilizzando l ispezione lineare, l ispezione quadratica con c 1 = 1 e c 2 = 3 e il doppio hashing con h 2 (k) = 1 + (k mod (m 1)). Scansione lineare h(10) [10] h(22) [0] h(31) [9] h(4) [4] h(15) [4] [5] h(28) [6] h(17) [6] [7] h(88) [0] [1] h(59) [4] [5] [6] [7] [8] Scansione quadratica h(10) [10] h(22) [0] h(31) [9] h(4) [4] h(15) [4] [8] h(28) [6] h(17) [6] [10] [9] [3] h(88) [0] [4] [3] h(59) [4] [8] [7] Hashing doppio h(10) [10] h(22) [0] h(31) [9] h(4) [4] h(15) [4] [10] [5] h(28) [6] h(17) [6] [3] h(88) [0] [9] [7] h(59) [4] [3] [2]

Algoritmi 2 - Dr. Simone Faro - Esercizi sulle Tabelle Hash 5 5. Supponete di applicare la tecnica del doppio hashing per risolvere le collisioni, ovvero utilizzare una funzione hash h(k, i) = (h 1 (k) + ih 2 (k)) mod m. Dimostrate che se m ed h 2 (k) hanno il massimo comune divisore d 1 per qualche chiave k, allora una ricerca senza successo della chiave k esamina soltanto una frazione 1/d della tavola hash prima di ritornare alla cella iniziale h 1 (k). Pertanto se d = 1, e quindi m e h 2 (k) sono numeri relativamente primi, la ricerca puó esaminare l intera tavola hash. L aritmetica modulare si basa sul concetto di congruenza modulo n. Dati tre numeri interi a, b, n, con n 0, diciamo che a e b sono congruenti modulo n se la loro differenza (a b) é un multiplo di n. In questo caso scriviamo a b mod n Per cui se (a mod n = b) allora (a b mod n). Se h 2 (k) ed m fossero primi tra loro la scansione che utilizza la funzone hash (h(k, i) = h 1 (k) + ih 2 (k)) mod m ispezionerebbe tutte le caselle della nostra tabella. Questo viene dimostrato facilmente nel seguente modo. Siano i e j due distinti valori per cui si abbia ih 2 (k) mod m = jh 2 (k) mod m = a. Allora (ih 2 (k) a mod m) ed anche (jh 2 (k) a mod m). Ne segue per una proprietá delle congruenze che ih 2 (k) jh 2 (k) mod m, da cui i j mod m. Questo implica che (i j) é un multiplo di m, per cui devono essere ispezionate almeno m caselle prima di ottenere una posizione uguale. Se h 2 (k) e m avessero un massimo comune divisore d 1 allora potremmo porre h 2 (k) = c d ed m = c d. Da questo si avrebbe i h 2 (k) mod m = (i d c ) mod (c d) = (i c ) mod c e la distanza tra due valori uguali nella scanzione si ridurrebbe a c = m/d.

Algoritmi 2 - Dr. Simone Faro - Esercizi sulle Tabelle Hash 6 6. Supponete di applicare la tecnica della scansione quadratica risolvere le collisioni, ovvero utilizzare una funzione hash h(k, i) = (h 1 (k)+c 1 i+ c 2 i 2 ) mod m. Trovare i possibili valori di c 1, c 2 ed m in modo che la scansione controlli l intera tabella. Basandoci sul concetto di congruenza modulo n, utilizzata in uno degli esercizi precedenti, secondo la quale Dati tre numeri interi a, b, n, con n 0, si ha che a b mod n se la loro differenza (a b) é un multiplo di n, possiamo affermare che se (a mod n = b) allora (a b mod n). Si puó preliminarmente osservare che la nostra sequenza di scansione, definita dalla funzione (h 1 (k) + c 1 i + c 2 i 2 ) mod m, ispeziona tutta la tabella se e solo se la sequanza di scansione (c 1 i + c 2 i 2 ) mod m ispeziona tutta la tabella. Questo perché nella scansione quadratica, fissati c 1 e c 2, la sequenza di scansione é definita dal valore iniziale h 1 (k). Siano i e j due distinti valori per cui si abbia (c 1 i + c 2 i 2 ) mod m = (c 1 j + c 2 j 2 ) mod m = a Allora ((c 1 i + c 2 i 2 ) a mod m) ed anche ((c 1 j + c 2 j 2 ) a mod m). Ne segue per una proprietá delle congruenze che (c 1 i + c 2 i 2 ) (c 1 j + c 2 j 2 ) mod m, da cui ((c 1 i + c 2 i 2 ) (c 1 j + c 2 j 2 )) = mp, per qualche intero p. c 1 i + c 2 i 2 c 1 j c 2 j 2 = c 1 (i j) + c 2 (i 2 j 2 ) = c 1 (i j) + c 2 (i j)(i + j) = (i j)(c 1 + c 2 (i + j)) = mp Ne segue che (i j) é un multiplo di m solo se n N i valori (c 1 + c 2 n) e m sono primi tra loro, cioé MCD((c 1 + c 2 n), m) = 1. Ad esempio possiamo scegliere i valori di c 1, c 2 e m nel seguente modo: scegliamo m in modo che sia una potenza di 2 scegliamo come c 1 un numero dispari scegliamo come c 2 un numero pari In questo modo avremo che (c 1 +c 2 n) sará un numero dispari per ogni n N.

Algoritmi 2 - Dr. Simone Faro - Esercizi sulle Tabelle Hash 7 7. Supponete di inserire le chiavi 13, 2, 30, 42, 17, 8, 7, 67, 48 in una tavola hash di lunghezza m = 13 utilizzando l indirizzamento aperto con la funzione hash ausiliaria h (k) = k mod m. Illustrate il risultato dell inserimento di queste chiavi utilizzando l ispezione lineare, l ispezione quadratica con c 1 = 3 e c 2 = 3 e il doppio hashing con h 2 (k) = 1 + (k mod (m 1)). 8. Supponete di dover inserire l insieme di chiavi {11, 21, 31, 3, 7, 83, 4, 22, 36, 25, 44} in una tavola hash di lunghezza m = 9 utilizzando l indirizzamento aperto. Si definisca una sequenza ottimale delle chiavi in input che minimizzi le celle ispezionate sapendo che l inserimento avviene per ispezione quadratica con funzione hash ausiliaria h (k) = k mod m e con c 1 = 3 e c 2 = 3. Motivare la risposta.