Esempio Scritto 4
Esempio Scritto 4
PRIMA PARTE
1. [3 punti] Sia A un algoritmo di complessità Θ(n2 ). Può esistere una istanza per
3
cui A esegue 10n operazioni? E una per cui ne esegue n20 ? Motivare brevemente le
risposte.
2. [4 punti] Dimostrare per induzione che in un albero binario proprio T non vuoto, si
ha m = n − m + 1, dove n è il numero di nodi e m è il numero di foglie di T .
SECONDA PARTE
1. [5 punti] Sia T un albero binario di ricerca che contiene n entry (k, val), dove k è
una chiave intera e val un valore reale positivo. Per ogni nodo v ∈ T esiste un campo
v.maxval che riporta il massimo valore delle entry contenute nel sottoalbero Tv (tale
valore è 0 se v è foglia). Progettare un algoritmo ricorsivo SearchMax che, data una
chiave k, determina il massimo valore di una entry con chiave ≥ k, e analizzarne la
complessità. L’algoritmo restituisce 0 se T non contiene entry con chiavi ≥ k.
3. [6 punti] Sia G = (V, E) un grafo con V = {1, 2, ..., n} e E ⊆ {(i−1, i) : 1 < i ≤ n}.
Ogni vertice i ∈ V ha un flag binario f (i). Il seguente pseudocodice determina se
ogni componente connessa di G ha almeno un vertice con flag 1.
prevComponents ← true;
if (f (1) = 1) then currComponent ← true else currComponent ← false;
for i ← 2 to n do
if ((i − 1, i) ∈ E) then
if (f (i) = 1) then currComponent ← true;
else
prevComponents ← prevComponents AND currComponent;
if (f (i) = 1) then currComponent ← true;
else currComponent ← false;
return prevComponents AND currComponent
Dire che cosa rappresentano prevComponents e currComponent alla fine di un’arbitraria
iterazione i del for. (A titolo d’esempio, per il grafo con V = {1, 2, 3, 4, 5, 6, 7, 8} e
E = {(1, 2), (3, 4), (4, 5), (7, 8)} e flag a 1 nei vertici 1,5,6,8, restituisce true.)