• Non ci sono risultati.

Esame di Algoritmi e Strutture di Dati (A) Luned`ı 2 Settembre 2002 Nome: Cognome: Matricola:

N/A
N/A
Protected

Academic year: 2021

Condividi "Esame di Algoritmi e Strutture di Dati (A) Luned`ı 2 Settembre 2002 Nome: Cognome: Matricola:"

Copied!
6
0
0

Testo completo

(1)

Esame di Algoritmi e Strutture di Dati (A) Luned`ı 2 Settembre 2002

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

Si consideri la struttura di dati insieme. Si rappresenti un insieme di numeri me- diante una lista in cui il campo chiave di ogni oggetto della lista contiene un elemento dell’insieme. Si considerino i seguenti due casi:

1. la lista che rappresenta l’insieme non `e ordinata (cio`e gli oggetti nella lista sono inseriti in ordine qualsiasi);

2. 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) che verifica se l’insieme

contenuto nella lista A `e un sottoinsieme di quello contenuto nella lista B. Si calcoli

in entrambi i casi la complessit`a computazionale della procedura.

(2)

Soluzione

Nel caso della lista non ordinata abbiamo la seguente procedura:

Algoritmo 1 SubSet(A, B) SubSet(A, B)

1:

x ← head(A)

2:

while x 6= NIL do

3:

if ListSearch(B, key[x]) = NIL then

4:

return false

5:

else

6:

x ← next[x]

7:

end if

8:

end while

9:

return true

Siano n la lunghezza di A e m la lunghezza di B. Dato che la complessit`a di

ListSearch `e lineare, la complessit`a di SubSet risulta Θ(nm).

(3)

Nel caso della lista ordinata abbiamo la seguente procedura:

Algoritmo 2 SubSet(A, B) SubSet(A, B)

1:

x ← head(A)

2:

y ← head(B)

3:

while x 6= NIL do

4:

while (y 6= NIL) and (key[x] 6= key[y]) do

5:

y ← next[y]

6:

end while

7:

if y = NIL then

8:

return false

9:

else

10:

x ← next[x]

11:

y ← next[y]

12:

end if

13:

end while

14:

return true

Siano n la lunghezza di A e m la lunghezza di B. La complessit`a di SubSet risulta Θ(n + m).

Esercizio 2 (Punti 6)

1. Siano S una sequenza di numeri distinti e i un indice di S. Si dia la definizione di elemento di ordine i della sequenza S;

2. siano A un vettore di numeri distinti e i un indice di A. Si consideri la procedura Select(A, i) che restituisce l’elemento di ordine i di A. Si scriva una procedu- ra SelectSort(A) che risolve il problema dell’ordinamento usando la procedura Select.

Soluzione

L’elemento di ordine i di una sequenza S `e quell’elemento si S tale che esistono i − 1 elementi in S pi` u piccoli di esso.

Algoritmo 3 SelectSort(A) SelectSort(A)

1:

for i ← 1 to length(A) do

2:

B[i] ← Select(A, i)

3:

end for

4:

for i ← 1 to length(A) do

5:

A[i] ← B[i]

6:

end for

(4)

Esame di Algoritmi e Strutture di Dati (B) Luned`ı 2 Settembre 2002

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 solo quest’ultima;

• 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 3 (Punti 24)

Si consideri la struttura di dati insieme. Si rappresenti un insieme di numeri me- diante una lista in cui il campo chiave di ogni oggetto della lista contiene un elemento dell’insieme. Si considerino i seguenti due casi:

1. la lista che rappresenta l’insieme non `e ordinata (cio`e gli oggetti nella lista sono inseriti in ordine qualsiasi);

2. 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 SetEqual(A, B) che verifica se gli insiemi

contenuti nelle liste A e B sono uguali. Si calcoli in entrambi i casi la complessit`a

computazionale della procedura.

(5)

Soluzione

Nel caso della lista non ordinata, usiamo la seguente procedura ausiliaria SubSet(A, B) che verifica se l’insieme contenuto nella lista A `e un sottoinsieme di quello contenuto nella lista B (vedi soluzione Compito A).

Algoritmo 4 SetEqual(A, B) SetEqual(A, B)

1:

return SubSet(A, B) and SubSet(B, A)

Dato che la complessit`a di SubSet `e Θ(nm), la complessit`a di SetEqual risulta

Θ(2nm) = Θ(nm).

(6)

Nel caso della lista ordinata abbiamo la seguente procedura:

Algoritmo 5 SetEqual(A, B) SetEqual(A, B)

1:

x ← head(A)

2:

y ← head(B)

3:

while (x 6= NIL) and (y 6= NIL) do

4:

if key[x] 6= key[y] then

5:

return false

6:

else

7:

x ← next[x]

8:

y ← next[y]

9:

end if

10:

end while

11:

if (x = NIL) and (y = NIL) then

12:

return true

13:

else

14:

return false

15:

end if

Siano n la lunghezza di A e m la lunghezza di B. La complessit`a di SetEqual risulta Θ(min{n, m}).

Esercizio 4 (Punti 6)

1. Siano S una sequenza di numeri distinti e i un indice di S. Si dia la definizione di elemento di ordine i della sequenza S;

2. siano A un vettore di numeri distinti e i un indice di A. Si consideri la procedura Select(A, i) che restituisce l’elemento di ordine i di A. Si scriva una procedu- ra SelectSort(A) che risolve il problema dell’ordinamento usando la procedura Select.

Soluzione

L’elemento di ordine i di una sequenza S `e quell’elemento si S tale che esistono i − 1 elementi in S pi` u piccoli di esso.

Algoritmo 6 SelectSort(A) SelectSort(A)

1:

for i ← 1 to length(A) do

2:

B[i] ← Select(A, i)

3:

end for

4:

for i ← 1 to length(A) do

5:

A[i] ← B[i]

6:

end for

Riferimenti

Documenti correlati

[r]

Qualora sia data pi`u di una risposta allo stesso quesito, questa sar` a considerata errata, anche se una delle rispote date `e corretta.. I punteggi per ciascun quesito sono

Nota Bene: nella procedura devono comparire almeno una volta tutte le variabili dichiarate (A, B, C, D, E, H, K, M).. Scrivere la soluzione nella

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

Una lista circolare `e una lista in cui il campo next dell’ultimo elemento punta al primo elemento della lista, e il campo prev del primo elemento punta all’ultimo elemento

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

Derivata prima e seconda della funzione di Heaviside (5.2.5, 5.2.6) La convergenza nello spazio delle distribuzioni; lo spazio D ′ come