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