POLITECNICO DI MILANO ESAME DI INFORMATICA Prof.ssa Sara Comai Laurea On Line Anno Accademico 00/00 II Prova in itinere È sconsigliato l uso di libri e appunti. Salvare il file con nome: COGNOME.cpp, dove COGNOME è il cognome dello studente. All inizio del vostro file inserite Cognome: Nome: Matricola: Classe Virtuale: ESERCIZIO Data una tabella hash di lunghezza m=, si supponga di dover inserire (in ordine) le chiavi:,,, 0,,,, con la funzione di hash f(k) = k mod m. Si illustrino i risultati dell inserimento usando quadratic probing double hashing (la seconda funzione di hash è h (k)=k mod(m-)) Quadratic Probing 0 : collisione!! h()=(h()+)mod= collisione!! h()=(h()+)mod= (0!!!!) 0: collisione!! h(0)=(h(0)+)mod= : collisione!! h()=(h()+)mod= collisione!! h()=(h()+)mod= collisione!! h() =(h()+)mod= (!!!!) : collisione!! h()=(h()+)mod=
Double Hashing 0 : collisione!! h ()=mod= h()=(h()+*)mod= 0: collisione!! h (0)=0mod= h(0)=(h(0)+*)mod= : collisione!! h ()=mod= h()=(h()+*)mod= collisione!! h()=(h()+*)mod= : collisione!! h ()=mod= h()=(h()+*)mod= ESERCIZIO Quale dei seguenti alberi è uno heap? Per i casi negativi indicare il motivo, per quelli positivi disegnare un array che lo memorizzi. (a) (b) (c) (d)
(a) (b) No, -- (c) (d) No, non è completo ESERCIZIO Un generico gioco elettronico è composto da una serie di personaggi tra cui: Maghi caratterizzati da un nome, da un livello di esperienza (intero). L'elenco delle magie che possono lanciare e l'elenco degli oggetti raccolti durante il gioco. Cavalieri caratterizzati da un nome, da un livello di esperienza. L'energia della corazza che li protegge e l'elenco degli oggetti raccolti durante il gioco Draghi caratterizzati da un nome, da un livello energetico e da un livello di esperienza. Si supponga che durante lo svolgimento del gioco siano presenti un certo numero di maghi, un certo numero di cavalieri ed un certo numero di draghi. Si consideri di avere a disposizione un array di puntatori ai personaggi presenti nel gioco. Puntatori in posizione differente nell'array possono puntare anche allo stesso personaggio (come mostrato in figura). Cav M Mago G Cav C Drago A Drago E
Si realizzi un algoritmo per contare il numero di personaggi presenti nel gioco. L'algoritmo deve essere il più efficiente possibile e non deve far uso di informazioni ausiliarie associate ai personaggi. Un oggetto è caratterizzato dall'indirizzo di memoria dove è allocato. Puntatori che puntano allo stesso oggetto hanno lo stesso valore numerico intero. E' possibile trattare un array di puntatori a zone di memoria come un array di numeri interi. Se su questo array si applica un algoritmo di ordinamento e poi lo si scandisce saltando i valori uguali è possibile contare in modo efficiente il numero di oggetti presenti in memoria pseudocodice: const int N = 00; Personaggi* popolazione[n]; sort(popolazione,n); if (N == 0) cout << "Array nullo"; else { count = ; for (i=; i < N; i++) { if (popolazione[i]!= popolazione[i-]){ count++; } } cout << "Il numero di personaggi presenti nel gioco è pari a " << count; } ESERCIZIO Si supponga di inserire i seguenti record (dei quali vengono date le chiavi) in un B+ tree di ordine : 0 0 (i record vengono inseriti i quest'ordine). Si disegni il B+ tree ottenuto, supponendo che i nodi foglia possano contenere record. 0 0 0
. Si disegni il B+ tree dopo la cancellazione del nodo. 0 0 0 ESERCIZIO Dato il seguente grafo 0 0. individuare i percorsi più brevi generati applicando l'algoritmo di Dijkstra per il vertice : si mostri l'array D per ogni vertice processato. Inizio Processo 0 Processo 0 Processo 0 Processo 0 Processo 0 Processo 0
. individuare l'albero di ricoprimento ottenuto applicando l'algoritmo di Prim partendo dal vertice. (l'albero può essere mostrato graficamente oppure descritto tramite l'elenco degli archi) 0 0