Testo - Moreno Marzolla Home Page

Download Report

Transcript Testo - Moreno Marzolla Home Page

Nome e Cognome ______________________________________ Matricola __________________
Corso di Algoritmi e Strutture Dati—Informatica per il Management
Prova Scritta, 4/9/2014
•
•
•
•
•
•
•
•
Chi deve recuperare il progetto del modulo 1 ha 1 ora e 30 minuti per svolgere gli esercizi 1, 2, 3
Chi deve recuperare il progetto del modulo 2 ha 1 ora e 30 minuti per svolgere gli esercizi 4, 5 e 6
Chi deve sostenere la prova completa ha 2 ore e 30 minuti per svolgere tutti gli esercizi proposti.
Durante la prova è consentito consultare libri e appunti.
Non è consentito l'uso di dispositivi elettronici (ad esempio, cellulari, tablet, calcolatrici elettroniche...), né
interagire in alcun modo con gli altri studenti pena l'esclusione dalla prova, che potrà avvenire anche dopo il
termine della stessa.
Le risposte devono essere scritte a penna, in modo leggibile e adeguatamente motivate. Le parti scritte a matita
verranno ignorate.
Le risposte vanno scritte solo su questi fogli; eventuali altri fogli possono essere utilizzati per la brutta copia
ma non verranno corretti.
I voti saranno pubblicati su AlmaEsami e ne verrà data comunicazione tramite la mail di Ateneo. I voti ≥ 18
devono essere accettati o rifiutati secondo le indicazioni fornite sulla pagina web del corso; i voti non accettati
non verranno verbalizzati.
BARRARE LA CASELLA CORRISPONDENTE ALLA PARTE SVOLTA
□ Svolgo solo la parte relativa al modulo 1 (esercizi 1, 2, 3);
□ Svolgo solo la parte relativa al modulo 2 (esercizi 4, 5, 6);
□ Svolgo tutto il compito
NON SCRIVERE NELLA TABELLA SOTTOSTANTE
Es. 1
/3
Es. 2
/2
/3
Es. 3
/3
/3
Es. 4
/2
/3
Es. 5
/2
/5
Es. 6
/3
/3
Nome e Cognome ______________________________________ Matricola __________________
Esercizio 1. Consideriamo n oggetti aventi pesi rispettivamente P[1..n] (i pesi sono tutti valori reali
positivi, l'array non è ordinato). Una scatola è in grado di contenere k di questi oggetti, 1 ≤ k ≤ n,
purché il peso totale sia minore o uguale a T.
Scrivere un algoritmo efficiente che, dato in input l'array dei pesi P[1..n], l'intero k e il valore reale
positivo T, restituisce true se e solo se esistono esattamente k oggetti tra gli n disponibili il cui peso
totale sia minore o uguale a T. (Suggerimento: il problema è molto più semplice di quanto possa
sembrare, e non sono richieste tecniche algoritmiche avanzate come la programmazione dinamica.
È sufficiente considerare i k elementi di peso minimo...).
[punti 3]
Determinare il costo asintotico dell'algoritmo proposto, motivando la risposta.
[punti 2]
Nome e Cognome ______________________________________ Matricola __________________
Esercizio 2. Determinare il costo asintotico degli algoritmi seguenti (non è richiesto di indicare
cosa calcolano, basta solo determinarne il costo asintotico). Motivare adeguatamente le risposte.
(Nota: il primo algoritmo, ricorsivo, viene inizialmente invocato come ALGORITMOA( A, 1, n) )
ALGORITMOA( real A[1..n], integer i, integer j ) → real
if ( i ≥ j ) then
return 1.0;
else
real tmp ← 0;
for integer k ← i to j do
tmp ← tmp + A[k];
endfor
integer m ← FLOOR( ( i + j ) / 2 ); // arrotondamento per difetto
return ALGORITMOA(A, i, m) + k + ALGORITMOA(A, m+1, j);
endfor
[punti 3]
ALGORITMOB( real A[1..n] ) → real
real result ← 0;
integer k, j;
for k ← 1 to n - 10 do
for j ← k to k + 10 do
result ← result + A[j];
endfor
endfor
return result;
[punti 3]
Nome e Cognome ______________________________________ Matricola __________________
Esercizio 3. Si consideri un albero binario T in cui ad ogni nodo v è associato un valore intero v.val.
Scrivere un algoritmo ricorsivo che, dato in input T e un intero r, restituisce il numero di nodi che
hanno valore esattamente uguale a r. (Attenzione: l'albero T non è un albero binario di ricerca,
quindi i nodi possono contenere valori qualsiasi senza un criterio particolare)
[punti 3]
Determinare il costo asintotico dell'algoritmo proposto, motivando la risposta
[punti 2]
Nome e Cognome ______________________________________ Matricola __________________
Esercizio 4. Si consideri una tabella hash realizzata con un array di m = 9 elementi (l'array è
indicizzato a partire da zero) in cui le collisioni sono gestite mediante indirizzamento aperto. Le
chiavi sono numeri interi, e la funzione hash utilizzata è:
h(k, i) = (k + 3 × i) mod m
dove k indica il valore della chiave, e i è l'indice del tentativo di inserimento (la prima posizione in
cui tentare di inserire la chiave k si determina ponendo i = 0, se risulta occupata si prova con i = 1 e
così via).
1. Provare ad inserire le seguenti chiavi nella tabella hash: 0, 3, 6, mostrando il contenuto
dell'array dopo ciascun tentativo. Se a questo punto si tenta di inserire la chiave 21, che
succede?
[punti 3]
2. Supponiamo che la tabella sia realizzata con un array di m = 10 elementi, anziché nove: la
funzione hash rimane la stessa. Si verifica ancora il problema evidenziato nel punto
precedente?
[punti 2]
Nome e Cognome ______________________________________ Matricola __________________
Esercizio 5. Si consideri una famiglia di insiemi disgiunti mantenuta mediante un algoritmo merge-find di
tipo QuickUnion con euristica “union by rank” (quindi l'operazione merge(A, B) rende la radice dell'albero
più basso figlia della radice dell'albero più alto; se entrambi gli alberi hanno la stessa altezza, rende la radice
di B figlia della radice di A). La struttura QuickUnion è inizialmente composta dagli elementi {1}, {2}, {3},
… {10}. Dopo un certo numero di operazioni merge(), risulta avere la struttura seguente:
1
2
7
3
6
4
9
5
8
10
Elencare una sequenza di operazioni merge() che al termine produca le struttura mostrata in figura.
Disegnare la struttura QuickUnion dopo ciascuna delle operazioni indicate.
[punti 5]
Nome e Cognome ______________________________________ Matricola __________________
Esercizio 6. Dato un grafo orientato G = (V, E), un nodo s si chiama sorgente universale se
partendo da s è possibile raggiungere ogni altro nodo del grafo.
Scrivere un algoritmo efficiente che, dato in input il grafo orientato G = (V, E) e un nodo s ∈ V,
restituisce true se s è una sorgente universale, false altrimenti.
[punti 3]
Determinare il costo dell'algoritmo proposto, nel caso ottimo e nel caso pessimo; specificare anche
quando si verificano il caso ottimo e pessimo.
[punti 3]