Lezione del 7/12/04 [2 ore, in AULA C, dalle 16:00 alle 18:00]
di: Algoritmi & Laboratorio (Modulo 1)
"Riassunto" della lezione:
Sono stati svolti i seguenti esercizi (alla lavagna).
1. Si risolvano con il metodo iterativo le seguenti relazioni di ricorrenza:
a) T(1) = 1
T(n) = 4T(n/2) + n3 n > 1
b) T(1) = 1
T(n) = 5T(n/2) + n n > 1
c) T(1) = 1
T(n) = 2T(n/4) + n n > 1
d) T(1) = 1
T(n) = 3T(n/2) + (1/3)T(n/2) + n4 n > 1
e) T(0) = 1
T(n) = T(⎣n/2⎦) + T(⎣n/5⎦) + 3 n > 0
Svolgimento dell’esercizio 1.a.
Nel seguito log sta a indicare logaritmo in base 2.
T(n) = 4T(n/2) + n3
= 22T(n/2) + n3
= 22 (22T(n/22) + (n/2)3)+ n3
= 24T(n/22) + n3 /2 + n3
= 24 (22T(n/23) + (n/22)3) + n3 /2 + n3 = 26T(n/23) + n3 /22 + n3 /2 + n3
= 26 (22T(n/24) + (n/23)3) + n3 /22 + n3 /2 + n3 = 28T(n/24) + n3 /23 + n3 /22 + n3 /2 + n3
= 28 (22T(n/25) + (n/24)3) + n3 /23 + n3 /22 + n3 /2 + n3
= 210T(n/25) + n3 /24 + n3 /23 + n3 /22 + n3 /2 + n3 …
= 22 log n T(n/2log n) + n3 /2(log n)-1 +...+ n3 /22 + n3 /2 + n3 = 2log n^2 T(1) + n3 ( 1/2(log n)-1 +...+ 1/22 + 1/2 + 1) = n2 + n3 ( 1/2(log n)-1 +...+ 1/22 + 1/2 + 1)
= n2 + n3 ( ((1/2)log n - 1) / (1/2 - 1) ) = n2 + 2 n3 ( 1 - (1/2)log n )
= n2 + 2 n3 ( 1 - 1/n ) = n2 + 2 n2 ( n-1) = 2n3 - n2
= THETA(n3)
Svolgimento dell’esercizio 1.b.
Nel seguito log sta a indicare logaritmo in base 2.
T(n) = 5T(n/2) + n
= 5 (5T(n/22) + n/2) + n
= 52T(n/22) + (5/2)n + n
= 52 (5T(n/23) + n/22) + (5/2)n + n = 53T(n/23) + (5/2) 2 n + (5/2)n + n
= 53 (5T(n/24) + n/23) + (5/2) 2 n + (5/2)n + n = 54 T(n/24) + (5/2) 3 n + (5/2) 2 n + (5/2)n + n …
= 5 log n T(n/2log n) + (5/2)(log n)-1n +...+ (5/2) 2 n + (5/2)n + n = 5 log n T(1) + (5/2)(log n)-1n +...+ (5/2) 2 n + (5/2)n + n
= 5 log n + (5/2)(log n)-1 n +...+ (5/2) 2 n + (5/2)n + n
= n log 5 + (5/2)(log n)-1 n +...+ (5/2) 2 n + (5/2)n + n = n log 5 + n ( (5/2)(log n)-1 +...+ (5/2)2 + 5/2 + 1) = n log 5 + n( ((5/2)log n - 1) / (5/2 - 1) )
= n log 5 + (2/3) n( (5/2)log n - 1) = n log 5 + (2/3) n( (n log 5 )/n - 1) ) = n log 5 + (2/3) n log 5 – (2/3) n = THETA(n log 5)
Svolgimento dell’esercizio 1.c.
Simile allo svolgimento dell’esercizio precedente.
Svolgimento dell’esercizio 1.d.
Si osservi che
T(n) = 3T(n/2) + (1/3)T(n/2) + n4
= (10/3) T(n/2) + n4
il resto e’ simile allo svolgimento dell’esercizio 1.a.
Svolgimento dell’esercizio 1.e.
Risolviamo l’equazione disegnando l’albero della ricorsione.
T(n)
3 / \
/ \ T(⎣n/2⎦) T(⎣n/5⎦)
3
__________/ \_________
/ \ 3 3 / \ / \ / \ / \
T(⎣n/22⎦) T(⎣n/(2*5)⎦) T(⎣n/5*2⎦) T(⎣n/52⎦)
...
Dall’esame dell’albero e’ evidente che
- il ramo di sinistra avra’ altezza (log2 n)+1, - il ramo di destra avra’ altezza (log5 n)+1,
- gli altri rami avranno altezza compresa tra (log5 n)+1 e (log2 n)+1.
Ogni nodo interno e’ etichettato la costante 3, e le foglie sono etichettate con la costante 1.
Per maggiorare valore della funzione e’ quindi sufficiente contate i nodi di un albero binario completo di altezza (log2 n)+1 e moltiplicarli per 3.
Siccome un albero binario completo di altezza log2 n ha n –1 nodi, allora la soluzione dell’equazione di ricorrenza e’ O(n).