Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
COGNOME E NOME
MATRICOLA
Esercizio 2. Una matrice di dimensioni NxN sparsa se il numero di elementi diversi da zero
proporzionale a N o meno. Si supponga di voler rappresentare una matrice sparsa andando a
memorizzare solo gli elementi diversi da zero. A questo scopo si definisca una classe C++,
SparseMatrix, implementando il costruttore, la funzione put che assegna un valore alla posizione (i,j)
e la funzione get che restituisce il valore della matrice in posizione (i,j). Calcolare la complessit delle
tre operazioni. Discutere se la complessit ottenuta ottima.
class SparseMatrix {
SparseMatrix(int N)
void put(int i, int j, double val)
double get(int i, int j)
}
// a[i][j] = val
// restituisce a[i][j]
Scrivere una funzione ricorsiva C++ coefficiente(n,i) che dato lesponente n e lindice i calcoli il
coefficiente i-esimo di (a+b)n senza utilizzare altro che le somme dei coefficienti dei binomi di grado
inferiore. Ad esempio, coefficiente(2,0) restituisce 1, coefficiente(2,1) restituisce 2, coefficiente(2,2)
restituisce 1. Scrivere quindi una funzione C++ coefficienti(n) che, utilizzando la funzione
precedente, dato n, restituisce un vettore contenente tutti i coefficienti di (a+b)n.
Calcolare la complessit della funzione coefficienti(n). Ricordando che la stessa funzione in versione
iterativa vista a lezione, richiede un tempo di Theta(n2), si confronti la complessit della versione
ricorsiva e si discuta le motivazioni delleventuale similarit o differenza in termini di complessit.
Esercizio 4. Scrivere una funzione C++ che, dato un vettore, restituisce true, se il vettore
rappresenta una heap, false altrimenti. La funzione deve utilizzare il minor numero di confronti
possibili.