• Non ci sono risultati.

Esame di Algoritmi e Strutture di Dati 1

N/A
N/A
Protected

Academic year: 2021

Condividi "Esame di Algoritmi e Strutture di Dati 1"

Copied!
2
0
0

Testo completo

(1)

Esame di Algoritmi e Strutture di Dati 1 27 Giugno 2006

Esercizio 1 (Punti 15)

Sia A un vettore di numeri reali. Scrivere una procedura MaxRepeat(A) che restituisce l’elemento di A che si ripete pi` u volte in A. Valutare la complessit`a pessima della procedura scritta.

Soluzione

1:

MaxRepeat(A)

2:

HeapSort(A)

3:

max ← 0

4:

count ← 1

5:

for i ← 1 to length(A) do

6:

if i < lenght(A) and A[i] = A[i + 1] then

7:

count ← count + 1

8:

else

9:

if count > max then

10:

max ← count

11:

elmax ← A[i]

12:

end if

13:

count ← 1

14:

end if

15:

end for

16:

return elmax

La complessit`a pessima risulta O(n log n), ove n = length(A).

(2)

Esercizio 2 (Punti 15)

Sia n ≥ 1 un intero e A un vettore di lunghezza n tale che, per ogni indice i di A vale A[i] ∈ {1, 2, . . . n}. Scrivere una procedura MaxRepeat(A) che restituisce l’elemento di A che si ripete pi` u volte in A. La procedura deve avere complessit`a pessima O(n).

Soluzione

Uso un vettore di appoggio C di lunghezza n.

1:

MaxRepeat(A)

2:

for i ← 1 to n do

3:

C[i] ← 0

4:

end for

5:

for i ← 1 to n do

6:

C[A[i]] ← C[A[i]] + 1

7:

end for

8:

return ArrayMax(C)

Riferimenti

Documenti correlati

Si scriva una procedura Pascal, basata sulla ricerca binaria, per individuare in tempo O(log n) l’unico intero dell’intervallo 1..n+1 che non compare in V.... Si scriva

Dato un nodo v di T, definiamo S OMMA Z ERO di v la proprietà per cui la somma degli elementi contenuti nel figlio sinistro e nel figlio destro di v, se esistono entrambi,

Scrivere un algoritmo ricorsivo di tipo divide-et-impera che, dato un array A[1..n] di valori reali, restituisce true se e solo se A è ordinato in senso non decrescente, cioè se A[1]

Esistono due classi di memoria: automatica e statica La classe di memoria automatica è relativa a quegli oggetti locali ad un blocco (funzione o programma) che viene liberata

L Insertion Sort è uno algoritmo di ordinamento molto efficiente per ordinare un piccolo numero di elementi. L idea di ordinamento è quella che potrebbe usare un persona

L’array A[p…r] viene “suddiviso” in due sotto- array “non vuoti” A[p… q] e A[q+1…r] in cui ogni elemento di A[p…q] è minore o uguale ad ogni elemento

Lo scopo del gioco è quello di trasferire i dischi dal paletto di sinistra a quello di destra, senza mai mettere un disco su un altro di dimensione più piccola4. Regole

Si noti che l ordine in cui i piatti sono tolti dallo stack è inversa all ordine in cui essi sono stati inseriti nello stack, visto che solo il top dello stack è accessibile..