• Non ci sono risultati.

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

N/A
N/A
Protected

Academic year: 2021

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

Copied!
2
0
0

Testo completo

(1)

Esame di Algoritmi e Strutture di Dati I Marted`ı 10 Febbraio 2004

Nome:

Cognome:

Matricola:

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 del compito;

Non ` e possibile consultare alcun tipo di materiale didattico;

Non ` e possibile uscire dopo l’inizio dello scritto.

Esercizio 1 (Punti 30)

Un albero generico `e la generalizzazione di un albero binario in cui ogni nodo possiede un numero arbitrario di figli. I figli di ogni nodo sono ordinati da sinistra a destra. L’ ordinamento anticipato dei nodi di un albero generico si ottiene ordinando prima la radice e poi ordinando ricorsivamente i nodi di tutti gli alberi radicati sui suoi figli da sinistra a destra. Si veda l’esempio che segue.

1

9 8

7

6 5

4 3

2

Si definisca una opportuna struttura di dati per rappresentare un albero generico e si scriva una procedura P reorderV isit(x) che stampa in ordine an- ticipato le chiavi dei nodi dell’albero generico radicato in x.

Soluzione

Rappresento ogni nodo x dell’albero con un oggetto dotato dei seguenti

campi: c[x] che punta al primo figlio di x, oppure `e nil se x non ha figli,

r[x] che punta al fratello destro di x, oppure `e nil se x non ha fratelli destri, e

key[x] che contiene la chiave di x.

(2)

Propongo una soluzione iterattiva che utilizza una pila ausiliaria S.

Algoritmo 1 P reorderV isit(x) P reorderV isit(x)

1: S ← ∅

2: while x 6= nil do

3: print key[x]

4: P ush(S, x)

5: x ← c[x]

6: end while

7: while not StackEmpty(S) do

8: x ← r[P op(S)]

9: while x 6= nil do

10: print key[x]

11: P ush(S, x)

12: x ← c[x]

13: end while

14: end while

Una vesione ricorsiva `e la seguente:

Algoritmo 2 P reorderV isit(x) P reorderV isit(x)

1: if x 6= nil then

2: print key[x]

3: x ← c[x]

4: while x 6= nil do

5: P reorderV isit(x)

6: x ← r[x]

7: end while

8: end if

Si noti che il tempo impiegato da entrambi gli algoritmi `e lineare nel numero

di nodi, mentre lo spazio, cio`e la dimensione della pila, `e proporzionale rispetto

all’altezza dell’albero.

Riferimenti

Documenti correlati

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

• 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

• 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

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

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