INFORMATICA 3 Prof.ssa Sara Comai

Похожие документы
Massimo Benerecetti Tabelle Hash

Costrutti iterativi. Utilizzo dei costrutti iterativi

Algoritmi e Strutture Dati

COGNOME E NOME (IN STAMPATELLO) MATRICOLA

Algoritmi di Ricerca. Esempi di programmi Java

Esercizi Capitolo 7 - Hash

Esercizi riassuntivi (Fondamenti di Informatica 2 Walter Didimo) Soluzioni

GLI ALBERI BINARI DI RICERCA. Cosimo Laneve

Laboratorio di Programmazione Appunti sulla lezione 4: Divide et impera e algoritmi di ordinamento

Massimo Benerecetti Tabelle Hash: gestione delle collisioni

Lezione 12 Tabelle Hash

LE STRUTTURE DATI DINAMICHE: GLI ALBERI. Cosimo Laneve

Esercizio 1 (15 punti)

Dizionario. Marina Zanella Algoritmi e strutture dati Tabelle hash 1

TABELLE AD INDIRIZZAMENTO DIRETTO

Algoritmi di Ricerca. Esempi di programmi Java

Formalismi per la descrizione di algoritmi

Esercizi. La funzione swapint() primo tentativo

Esercizio 2 (punti 7) Dato il seguente programma C: #include <stdio.h> int swap(int * nome, int length);

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

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

Hash Table. Hash Table

Fondamenti di Informatica. Algoritmi di Ricerca e di Ordinamento

Programmazione a blocchi. Algobuild Prof. Sergio Roselli

Dati e Algoritmi 1: A. Pietracaprina. Mappa/Dizionario (I parte)

TRIE (albero digitale di ricerca)

03.x1. esercizi Sui cicli. 03-X1_Esercizi_[02] Versione del: giovedì 14 novembre Andrea Zoccheddu CORSO INFORMATICA ITI ANGIOY SASSARI

In questa lezione Strutture dati elementari: Pila Coda

Fondamenti di Informatica

Laboratorio di Programmazione Lezione 2. Cristian Del Fabbro

Ω (grande omega) Esempio 10 COMPLESSITÀ COMPUTAZIONALE DEGLI ALGORITMI

Corso di Informatica 1 Esercitazione n. 4

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

Esercitazione 7. Procedure e Funzioni

Algoritmi di ordinamento: Array e ricorsione

INDICI PER FILE. Accesso secondario. Strutture ausiliarie di accesso

Strutture di accesso ai dati: B + -tree

4.1 Modelli di calcolo analisi asintotica e ricorrenze

Heap e code di priorità

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

Alberi Binario in Java

Esempio: Tombola! Vogliamo progettare una applicazione che realizza il gioco della tombola Versione semplificata: un banco, un

Informatica 3. LEZIONE 21: Ricerca su liste e tecniche di hashing. Modulo 1: Algoritmi sequenziali e basati su liste Modulo 2: Hashing

Informatica/ Ing. Meccanica/ Prof. Verdicchio/ 14/02/2012 / Foglio delle domande / VERSIONE 1

18 - Vettori. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

6 - Blocchi e cicli. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Algoritmi di Ricerca. Esempi di programmi Java

Laboratorio di Algoritmi e Strutture Dati. Code con Priorità

Indirizzamento Aperto

Universita' di Ferrara Dipartimento di Matematica e Informatica. Algoritmi e Strutture Dati. Rappresentazione concreta di insiemi e Hash table

3 Costrutti while, for e switch

Algoritmi di ordinamento: Array e ricorsione

Algebra di Boole: Concetti di base. E un algebra basata su tre operazioni logiche

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

ARRAY E STRINGHE. ESERCIZIO 2 Scrivere un programma che calcola il numero di doppie e di dittonghi (2 vocali vicine) presenti in una stringa.

UD 3.5a: Searching (parte 1) ALGORITMO DI RICERCA SEQUENZIALE. Dispense, cap

Lezione 9 Alberi binari di ricerca

Il tipo astratto coda con priorità: specifiche sintattiche e semantiche. Realizzazioni.

Tabelle hash. Damiano Macedonio Università Ca' Foscari di Venezia.

Транскрипт:

INFORMATICA 3 Prof.ssa Sara Comai ESERCIZI SESSIONE LIVE Ricerca e indicizzazione Ing. Paola Spoletini 1. Hashing Data una tabella hash di lunghezza m=11, si supponga di dover inserire (in ordine) le chiavi: 3, 83, 7, 26, 1, 63, 97,46, con la funzione di hash h(k) = k mod m. Si illustrino i risultati dell inserimento usando: separate chaining linear probing quadratic probing (h i (k)=(h(k)+i 2 )modm) double hashing con h 2 (K)=1+(kmod(m-1)) SOLUZIONE Calcolo di h(k) h(3)=3mod11=2 h(83)=83mod11=6 h(7)=7mod11=2 h(26)=26mod11=4 h(1)=1mod11=4 h(63)=63mod11=8 h(97)=97mod11=9 h(46)=46mod11=2

Separate chaining 0 1 2 3 4 6 7 8 9 10 3 7 46 26 1 83 63 97 h(3)=2 h(83)=6 h(7)=2 h(26)=4 h(1)=4 h(63)=8 h(97)=9 h(46)=2 Linear probing 0 1 2 3 4 6 7 8 9 10 3 7 26 1 83 46 63 97 h(7)=2 -> lo slot 2 è occupato h 1 (7)=3 h(1)=4 -> lo slot 4 è occupato h 1 (1)= h(46)=2 -> lo slot 2 è occupato h 1 (46)=3 -> lo slot 3 è occupato h 2 (46)=4 -> lo slot 4 è occupato h 3 (46)= -> lo slot è occupato h 4 (46)=6 -> lo slot 6 è occupato h (46)=7 Quadratic probing h(3)=2 h(83)=6 h(7)=2 h(26)=4 h(1)=4 h(63)=8 h(97)=9 h(46)=2

0 1 2 3 4 6 7 8 9 10 46 3 7 26 1 83 63 97 h(7)=2 -> lo slot 2 è occupato h 1 (7)=3 h(1)=4 -> lo slot 4 è occupato h 1 (1)= h(46)=2 -> lo slot 2 è occupato h 1 (46)=3 -> lo slot 3 è occupato h 2 (46)=6 -> lo slot 6 è occupato h 3 (46)=0 h(3)=2 h(83)=6 h(7)=2 h(26)=4 h(1)=4 h(63)=8 h(97)=9 h(46)=2 Double hashing 0 1 2 3 4 6 7 8 9 10 46 3 26 1 83 63 97 7 h(7)=2 -> lo slot 2 è occupato h 1 (7)=2+1*8=10 h(1)=4 -> lo slot 4 è occupato h 1 (1)=4+1*6=10 -> lo slot 10 è occupato h 2 (1)=4+2*6= h(46)=2 -> lo slot 2 è occupato h 1 (46)=2+1*7=9 -> lo slot 9 è occupato h 2 (46)=2+2*7= -> lo slot è occupato h 3 (46)=2+3*7=1 h(3)=2 h(83)=6 h(7)=2 h(26)=4 h(1)=4 h(63)=8 h(97)=9 h(46)=2 2. Hashing Data una tabella hash di lunghezza m=13, si supponga di dover inserire (in ordine) le chiavi: 3, 23, 7, 9, 12, 24,, 4, 8, 17 con la funzione di hash h(k) = k mod m. Si illustrino i risultati dell inserimento usando: separate chaining linear probing double hashing con h 2 (K)=1+(kmod(m-1))

SOLUZIONE Calcolo di h(k) h(3)=3mod13=3 h(23)=23mod13=10 h(7)=7mod13=7 h(9)=9mod13=9 h(12)=12mod13=12 h(24)=24mod13=11 h()=mod13= h(4)=4mod13=4 h(8)=8mod13=8 h(17)=17mod13=4 Separate chaining Linear probing h(3)=3 h(23)=10 h(7)=7 h(9)=9 h(12)=12 h(24)=11 h()= h(4)=4 h(8)=8 h(17)=4 h(3)=3 h(23)=10 h(7)=7 h(9)=9 h(12)=12 h(24)=11 h()= h(4)=4 h(8)=8 h(17)=4 0 1 2 3 4 6 7 8 9 10 11 12 3 23 9 7 12 11 4 17 8 0 1 2 3 4 6 7 8 9 10 11 12 3 23 9 7 12 11 4 17 8

0 1 2 3 4 6 7 8 9 10 11 12 3 4 17 7 8 9 23 24 12 h(17)=4 -> lo slot 4 è occupato h 1 (17)= -> lo slot è occupato h 2 (17)=6 h(3)=3 h(23)=10 h(7)=7 h(9)=9 h(12)=12 h(24)=11 h()= h(4)=4 h(8)=8 h(17)=4 Double hashing 0 1 2 3 4 6 7 8 9 10 11 12 3 17 4 7 8 9 23 24 12 h(17)=4 -> lo slot 4 è occupato h 1 (17)=4+1*6=10 -> lo slot 10 è occupato h 2 (17)=4+2*6=3 h(3)=3 h(23)=10 h(7)=7 h(9)=9 h(12)=12 h(24)=11 h()= h(4)=4 h(8)=8 h(17)=4 3. Hashing Data una tabella hash di lunghezza m=12, si supponga di dover inserire (in ordine) le chiavi: 7, 24, 32, 36, 43, 19, 21, 90, 102 con la funzione di hash f(k) = k mod m. Si illustrino i risultati dell inserimento usando - linear probing - quadratic probing. SOLUZIONE Linear Probing 7mod12=7

24mod12=0 32mod12=8 36mod12=0 collisione!!! ((36mod12)+1)mod12=1 43mod12=7 collisione!!! ((43mod12)+1)mod12=8 collisione!!! ((43mod12)+2)mod12=9 19mod12=7 collisione!!! ((19mod12)+1)mod12=8 collisione!!! ((19mod12)+2)mod12=9 collisione!!! ((19mod12)+3)mod12=10 21mod12=9 collisione!!! ((21mod12)+1)mod12=10 collisione!!! ((21mod12)+2)mod12=11 90mod12=6 102mod12=6 collisione!!! (102mod12)+1)mod12=7 collisione!!! (102mod12)+2)mod12=8 collisione!!! (102mod12)+3)mod12=9collisione!!! (102mod12)+4)mod12=10 collisione!!! (102mod12)+)mod12=11 collisione!!! (102mod12)+6)mod12=0 collisione!!! (102mod12)+7)mod12=1 collisone!!! (102mod12)+8)mod12=2 24 36 102 90 7 32 43 19 21 Quadratic Probing 7mod12=7 24mod12=0 32mod12=8 36mod12=0 collisione!!! ((36mod12)+1)mod12=1 43mod12=7 collisione!!! ((43mod12)+1)mod12=8 collisione!!! ((43mod12)+4)mod12=11 19mod12=7 collisione!!! ((19mod12)+1)mod12=8 collisione!!! ((19mod12)+4)mod12=11 collisione!!! ((19mod12)+9)mod12=4 21mod12=9 90mod12=6

102mod12=6 collisione!!! (102mod12)+1)mod12=7 collisione!!! (102mod12)+4)mod12=10 24 36 19 90 7 32 21 102 43 4. Algoritmi Nel gioco del SuGiu un giocatore deve indovinare un numero, compreso in un intervallo prefissato, attraverso una serie di tentativi. A ogni tentativo il giocatore indica un valore e un interlocutore che conosce il numero da indovinare dà una delle seguenti tre risposte: SI se il numero è stato indovinato, SU se il numero da indovinare dal giocatore è superiore al numero indicato, GIU se è inferiore. Tratteggiare l implementazione di un programma che, ricevendo come parametri in ingresso gli estremi inferiore e superiore dell intervallo di possibili valori per il numero da indovinare, riesca a trovarlo con un numero di tentativi minimo (si assuma che il programma possa fare la parte del giocatore, scrivendo sull output standard i suoi tentativi e leggendo le indicazioni dell interlocutore dall input standard). SOLUZIONE La strategia migliore è di simulare una ricerca binaria, mantenendo un intervallo di valori all interno del quale si assume che si trovi il numero da indovinare e utilizzando le indicazioni dell interlocutore per dimezzare la dimensione di tale intervallo a ogni tentativo. La complessità asintotica di tale programma è logaritmica rispetto all ampiezza dell intervallo di valori ammissibili. Bozza di programma: static void sugiu (int inf, int sup) { int med; String risposta; } do { med = (inf + sup) / 2; scrivi med; leggi risposta; if (risposta = GIU) sup = med 1; else if (risposta = SU) inf = med + 1; } while (risposta!= SI);

. B+-tree Si consideri il seguente albero: 19 11 29 2 3 7 11 17 19 23 29 31 a) Di che tipo e ordine è? b) Si eseguano in sequenza le seguenti operazioni: Inserisci 9, Inserisci 10, Inserisci 8, Cancella 23, Cancella 19. SOLUZIONE a) B+, m=4 b) Inserisci 9: 19 11 29 2 3 7 9 11 17 19 23 29 31 Inserisci 10: 19 9 11 29 2 3 7 9 10 11 17 19 23 29 31 6. B+-tree Dato il seguente albero:

19 11 30 2 4 6 8 11 17 19 22 30 36 a) Di che tipo e ordine è? b) Si indichi una sequenza di inserimenti che, partendo dall albero vuoto, porta all albero indicato, mostrando gli alberi intermedi ottenuti a seguito delle operazioni di split. SOLUZIONE a) B+ di ordine 4 b) ins 2, ins 4, ins : 2 4 ins 6: 2 4 6 ins 11, ins 17: 11 2 4 6 11 17 ins 8, ins 19, ins 22: 11 19 2 4 6 8 11 17 19 22 ins 30, ins 36:

19 11 30 2 4 6 8 11 17 19 22 30 36 N.B. la soluzione non è univoca: ad es. si può inserire 8 in una qualsiasi fase successiva a quella mostrata (ma non precedente), oppure permutare alcuni blocchi di inserimenti (come 2 e 4).