Il 0% ha trovato utile questo documento (0 voti)
22 visualizzazioni2 pagine

Esempio Scritto 4

Caricato da

firenatsuusa
Copyright
© © All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Il 0% ha trovato utile questo documento (0 voti)
22 visualizzazioni2 pagine

Esempio Scritto 4

Caricato da

firenatsuusa
Copyright
© © All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Sei sulla pagina 1/ 2

Dati e Algoritmi (Pietracaprina): Esempio Scritto (4) 1

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 .

3. [4 punti] Si consideri il metodo insert di una Priority Queue implementata tramite


uno heap P .

(a) Descrivere il metodo in pseudocodice.


(b) Dimostrare che la complessità è O(log n), dove n è il numero di entry in P . (Si
può usare il valore dell’altezza di P senza dimostrarlo.)

4. [5 punti] Sia G un grafo non diretto e pesato. Dimostrare che se u1 , u2 , . . . , uk è un


cammino minimo da u1 a uk , allora ui , ui+1 , . . . , uj è un cammino minimo da ui a uj
per ogni 1 ≤ i < j ≤ k.
Dati e Algoritmi (Pietracaprina): Esempio Scritto (4) 2

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.

2. [5 punti] Progettare un algoritmo che, date due sequenze ordinate S1 , S2 , ciascuna


contenente n interi distinti, determini il numero di elementi k ∈ S1 per cui S2 contiene
k 2 . L’algoritmo deve avere complessità Θ (n). (Suggerimento: modificare Merge)

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.)

Potrebbero piacerti anche