Sei sulla pagina 1di 1

Esercitazione di Algoritmi e Strutture Dati

1. Determinare in modo esplicito il costo computazionale del seguente algoritmo


Algorithm 1 Metodo
1: function metodo(int n)
2: if n  1 then
3: return n
4: a 1
5: for k 1 to n do
6: a a⇤2
7: return a + 2⇤metodo(n/2)

2. Si consideri un dizionario realizzato tramite tabelle hash in cui le collisioni sono risolte per
mezzo di liste di collisione. Si supponga
Algorithmche le chiavi del dizionario siano stringhe di lettere
2 Metodo
1: function metodo(nodo t)
e che la funzione hash sia definita 2:
per tavole di dimensione m = 5. Si consideri come
if t = null then
funzione hash la funzione che, data una stringa,
3: return 0
if t.left = null and t.right=null then
a. Somma i codici ascii dei caratteri dellat.val
stringa (ascii(A) = 65, ascii(B) = 66…)
4:
5: return
b. Divide il risultato per m 6: return metodo(t.left) + metodo(t.right)
c. Restituisce il resto della divisione.

Mostrare la risultante tavola hash dopo l’inserimento delle seguenti stringhe


MARTE LUNA COMETA PIANETI SOLE SOLI

3. Data una sequenza V di n numeri interi distinti, progettare un algoritmo basato sulla
programmazione dinamica per trovare la più lunga sotto-sequenza crescente di V

Es.: V = 9, 15, 3, 6, 4, 2, 5, 10, 3, allora la più lunga sotto-sequenza crescente è: 3, 4, 5, 10

4. Dato il seguente pseudo-codice che riceve in input un albero binario in cui ogni nodo
memorizza un valore nella variabile val:
a. descrivere il problema che l’algoritmo vuole risolvere e scegliete un opportuno
nome per l’algoritmo
b. determinarne il costo computazionale nell’ipotesi che l’albero in input sia
perfettamente bilanciato e completo
Algorithm 1 Metodo
1: function metodo(nodo t)
2: if t = null then
3: return 0
4: if t.left = null and t.right=null then
5: return t.val 1
6: return metodo(t.left) + metodo(t.right)

5. Dato il seguente grafo, si calcoli il minimo albero ricoprente con l’algoritmo di Prim (si
forniscano commenti che permettano di comprendere come l’algoritmo è stato applicato)

6. Si descriva lo pseudo-codice dell’algoritmo di ordinamento mergeSort e se ne derivi il costo


computazionale