• Non ci sono risultati.

Esame di Algoritmi e Strutture di Dati 1 Luned`ı 17 Maggio 2004

N/A
N/A
Protected

Academic year: 2021

Condividi "Esame di Algoritmi e Strutture di Dati 1 Luned`ı 17 Maggio 2004"

Copied!
3
0
0

Testo completo

(1)

Esame di Algoritmi e Strutture di Dati 1 Luned`ı 17 Maggio 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 25)

Un multi-insieme `e un insieme che pu`o contenere elementi ripetuti. Ad esempio {1, 3, 5, 1, 5, 7}.

1. Scegliere una opporturna struttura di dati per rappresentare un multi- insieme.

2. Sulla base della struttura di dati scelta, implementare in modo efficiente le seguenti procedure:

(a) M ultiSetInsert(S, a) che inserisce una occorrenza dell’elemento a nel multi-insieme S;

(b) M ultiSetDelete(S, a) che rimuove una occorrenza dell’elemento a dal multi-insieme S;

(c) M ultiSet2Set(S, T ) che trasforma il multi-insieme S in un insieme (privo di ripetizioni) T . Ad esempio, se S = {1, 3, 5, 1, 5, 7}, allora T = {1, 3, 5, 7}.

3. Valutare la complessit`a computazionale (pessima) delle procedure scritte.

1

(2)

Soluzione

Rappresento il multi-insieme mediante una lista i cui oggetti hanno quattro campi: key contiene l’elemento dell’insieme, mult contiene la sua molteplicit`a, cio`e il numero di occorrenze dell’elemento nell’insieme, next `e un puntatore all’oggetto seguente nella lista e prev `e un puntatore all’oggetto precedente nella lista.

La procedura M ultisetInsert(S, z) prende in ingresso un multi-insieme S (rappresentato come sopra) e un oggetto z tale che key[z] `e l’elemento da inserire in S. La complessi`a `e lineare nel numero di elementi distinti di S.

Algoritmo 1 MultiSetInsert(S,z) MultiSetInsert(S,z)

1:

x ← head(S)

2:

while x 6= nil and key[x] 6= key[z] do

3:

x ← next[x]

4:

end while

5:

if x 6= nil then

6:

mult[x] ← mult[x] + 1

7:

else

8:

mult[z] ← 1

9:

next[z] ← head(S)

10:

prev[z] ← nil

11:

prev[head(S)] ← z

12:

head(S) ← z

13:

end if

La procedura M ultisetDelete(S, z) prende in ingresso un multi-insieme S (rappresentato come sopra) e un oggetto z tale che key[z] `e l’elemento da cancellare da S. La complessi`a `e costante.

Algoritmo 2 MultiSetDelete(S,z) MultiSetDelete(S,z)

1:

if mult[z] > 1 then

2:

mult[x] ← mult[x] − 1

3:

else

4:

if prev[z] 6= nil then

5:

next[prev[z]] ← next[z]

6:

else

7:

head(S) ← next[z]

8:

end if

9:

if next[z] 6= nil then

10:

prev[next[z]] ← prev[z]

11:

end if

12:

end if

2

(3)

La procedura M ultiset2SetInsert(S, T ) prende in ingresso un multi-insieme S (rappresentato come sopra) e restituisce una pila T che contiene gli elementi di S senza ripetizioni. La complessi`a `e lineare nel numero di elementi distinti di S.

Algoritmo 3 Multiset2SetInsert(S,T) Multiset2SetInsert(S,T)

1:

x ← head(S)

2:

while x 6= nil do

3:

P ush(T, key[x])

4:

end while Esercizio 2 (Punti 5)

Si produca almeno un esempio per ciascuna delle seguenti categorie: albero ternario, albero ternario pieno, albero ternario completo. Gli esempi devono essere diversi tra loro.

Ha pi` u foglie un albero binario completo di altezza 2h oppure un albero quaternario completo di altezza h? Motivare la risposta.

Soluzione

Il numero di foglie `e lo stesso. Infatti, un albero binario completo di altezza 2h ha 2

2h

foglie, mentre un albero quaternario completo di altezza h ha 4

h

= (2

2

)

h

= 2

2h

foglie.

3

Riferimenti

Documenti correlati

La lunghezza del file non `e nota a priori e la sua correttezza non `e garantita: eventuali linee che non rispettino i criteri sopra indicati devono essere ignorate. Il programma

invia l’atto telematico firmato digitalmente, mediante la consollePCT di Fallco e la propria casella PEC, all’indirizzo PCT della Cancelleria Fallimentare del Tribunale,..

Come si vede, nell’algoritmo cerchiamo prima di ottenere un sistema equivalente all’originale in cui tutti i coefficienti tranne al massimo uno nella prima co ; , poi, usando

Dimostriamo che esiste sempre una soluzione ottima che contiene la scelta ingorda, ovvero in cui il job con durata pi`u corta sia scelto per primo.. Supponiamo di avere una

Nota: i programmi devono funzionare per qualsiasi combinazione dei parametri in ingresso, che saranno opportunamente scelti dall’insegnante in modo da riprodurre situazioni

la lista che rappresenta l’insieme `e ordinata (cio`e gli oggetti nella lista sono inseriti in ordine crescente di chiave).. In entrambi i casi, si scriva la procedura SubSet(A, B)

Si rappresenti un insieme di nu- meri mediante una lista in cui il campo chiave di ogni oggetto della lista contiene un elemento dell’insieme.. la lista che rappresenta l’insieme non

Scrivere una procedura che calcola la media di laurea secondo quanto de- liberato dal Consiglio utilizzando la struttura di dati scelta al punto