• Non ci sono risultati.

Per un buon esito dell’esame, si consiglia di:

N/A
N/A
Protected

Academic year: 2021

Condividi "Per un buon esito dell’esame, si consiglia di:"

Copied!
2
0
0

Testo completo

(1)

Esame di Algoritmi e Strutture di Dati Mercoled`ı 12 Febbraio 2003

Nome:

Cognome:

Matricola:

Per un buon esito dell’esame, si consiglia di:

scrivere in forma leggibile il proprio nome, cognome e matricola sul testo del compito e su ogni foglio consegnato;

provare gli esercizi prima in brutta copia. Ricopiarli in bella copia e consegnare quest’ultima oltre al testo del compito;

non fatevi prendere dal panico, e neppure dalla noia. Un giusto livello di tensione ` e ci` o che serve;

svolgere il compito individualmente. Passare copiando ` e dannoso per voi, e irrilevante per il docente.

Esercizio 1 (Punti 4)

Si discutano brevemente le differenze tra procedure ricorsive e iterattive.

Soluzione

Vedi dispensa del corso.

Esercizio 2 (Punti 26)

Sia x un nodo di un albero binario. Si consideri una procedura N odesCount(x) che ritorna il numero di nodi dell’albero radicato in x. Si scriva:

1. una versione iterativa della procedura N odesCount;

2. una versione ricorsiva della procedura N odesCount.

In entrambi i casi si calcoli la complessit`a computazionale della procedura.

1

(2)

Soluzione

Una versione iterativa di N odesCount `e la seguente:

Algoritmo 1 NodesCount(x) NodesCount(x)

1:

// Uso una coda vuota Q

2:

nodes ← 0

3:

if x 6= NIL then

4:

Enqueue(Q, x)

5:

end if

6:

while not QueueEmpty(Q) do

7:

y ← Dequeue(Q)

8:

nodes ← nodes + 1

9:

if lef t[y] 6= NIL then

10:

Enqueue(Q, lef t[y])

11:

end if

12:

if right[y] 6= NIL then

13:

Enqueue(Q, right[y])

14:

end if

15:

end while

16:

return nodes

La procedura visita l’albero per livelli, incrementando un contatore ad ogni nodo che incontra. La complessit`a `e dunque lineare nel numero di nodi.

Una versione ricorsiva di N odesCount `e la seguente:

Algoritmo 2 NodesCount(x) NodesCount(x)

1:

if x = NIL then

2:

return 0

3:

else

4:

return N odesCount(lef t[x]) + N odesCount(right[x]) + 1

5:

end if

Sia n il numero di nodi dell’albero radicato in x. La complessit`a C(n) di N odesCount(x)

`e espressa dalla seguente equazione ricorsiva: C(0) = 1 e, per n > 0, C(n) = C(a) + C(b) + 1, con a + b = n − 1. Si dimostra facilmente per induzione che C(n) = 2n + 1 = Θ(n).

2

Riferimenti

Documenti correlati

Accuratezza richiesta Valore dell’ integrale Stima errore assoluto Errore

Quesito F (punti 3) Trovare le radici dell’ equazione e −x 2 sin(2πx) = 0 nell’ intervallo [0, 1] utilizzando degli opportuni comandi Matlab o il metodo delle secanti..

Modificare opportunamente la struttura di dati tabella ad indirizzamento diretto in modo che possa contenere pi`u oggetti con la medesima chiave (ma con dati satellite

Scrivere in forma leggibile il proprio nome, cognome e matricola sul testo del compito e su ogni foglio consegnato.. Consegnare solo la bella copia e il testo

Date due liste circolari L e M che contengono insiemi disgiunti, la seguente procedura DisjointU nion(L, M ) ritorna un puntatore alla lista che con- tiene l’unione disgiunta

Scrivere in forma leggibile il proprio nome, cognome e matricola sul testo del compito e su ogni foglio consegnato;.. Consegnare solo la bella copia e il testo

ISTRUZIONI: Prima di tutto, su ogni foglio che consegnerai devi scrivere, in stampatello, nome, cognome e numero di matricola.. Devi riconsegnare anche il testo dell’esame (cio`

• La valutazione dello svolgimento degli esercizi verra’ utilizzata per la valutazione finale, in sede di esame finale del corso. • Consegnare i seguenti fogli stampati e