Universit`a degli Studi di Roma Tre - Facolt`a di Ingegneria C. S. Ing

Università degli Studi di Roma Tre - Facoltà di Ingegneria C. S. Ing. Informatica
Algoritmi e Strutture Dati – Prova del 30 novembre 2006
Indicare su tutti i fogli in alto a destra, con chiarezza, cognome e nome. Tempo a disposizione: 2 ore.
REGOLE:
Niente libri, quaderni o appunti: solo documento di riconoscimento, matita, penna gomma, etc.../ I fogli
verranno distribuiti successivamente al testo./ Se ci si ritira non si può portare fuori il foglio con il testo./
Non si può uscire durante la prova./ Cellulari spenti.
Esercizio n. 1 (40%)
Si definisce potenza k-esima (k > 0) di una matrice quadrata di dimensione n il prodotto della matrice
per se stessa eseguito k − 1 volte.
Dati in input due interi k e n che indicano rispettivamente la potenza e la dimensione della matrice,
scrivere un programma C che acquisisce da input una matrice M di dimensione n × n e costruisce una
nuova matrice P , potenza k-esima di M . Commentare opportunamente il programma.
Esercizio n. 2 (60%)
Dato un albero binario di ricerca etichettato con interi tutti distinti tra loro, si definisce cammino di
ricerca l’insieme dei nodi che costituiscono un cammino dalla radice fino ad una determinata foglia. Sia:
- A l’insieme delle chiavi a sinistra del cammino di ricerca,
- B l’insieme delle chiavi sul cammino di ricerca,
- C l’insieme delle chiavi a destra del cammino di ricerca.
Supponendo che la ricerca di una chiave k termini in una foglia e che le chiavi che etichettano i nodi
dell’albero siano tutte distinte, si vuole verificare che:
∀a, b, c | a ∈ A, b ∈ B, c ∈ C, si ha a < b < c
(∗)
Esempio: dato l’albero in figura, se la ricerca termina con la chiave k = 60 gli insiemi A, B e C che si
determinano sono i seguenti:
B
40
A
15
3
C
98
27
55
21
123
72
100
130
60
In questo caso la proprietà (∗) è soddisfatta.
Scrivere un algoritmo che, dati in input l’albero T e una chiave k (che per ipotesi è una foglia
dell’albero), restituisce in output true se gli insiemi generati dalla partizione verificano la proprietà (∗),
false altrimenti.
Calcolare la complessità asintotica dell’algoritmo proposto.
Iniziare a scrivere la pseudocodifica dell’algoritmo e, successivamente, le funzioni di supporto.
Si ricordano, le definizioni dei teoremi da applicare, eventualmente, per il calcolo della complessità:
Primo teorema per risolvere le equazioni di ricorrenza:
Se

a
se n = 0
T (n) =
T (n − 1) + g(n) se n > 0
allora:
n
X
T (n) = a +
g(k)
k=1
Master Theorem: Sia p(nk ) un polinomio di grado k. Se

c0
T (n) =
a T (n/b) + p(nk )
per a, b ≥ 1 e p(nk ) un polinomio di grado k.
Allora:
caso 1: T (n) = Θ(nlogb a )
caso 2: T (n) = Θ(nk lg n)
caso 3: T (n) = Θ(nk )
se
se
se
a > bk .
a = bk .
a < bk .
se n = 0
se n > 0