Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Ricorrenze
Corso di Perfezionamento
Divide et Impera, Algoritmi Ricorsivi e Ricorrenze
17 febbraio 2009
Outline
1 Divide et Impera
2 Ricorrenze
Metodo iterativo
Metodo degli alberi di ricorsione
Metodo della sostituzione
Metodo dell’esperto
Tecniche di Programmazione
1 Divide et Impera
2 Programmazione Dinamica (PD for short)
3 Algoritmi golosi
Max(A, i, j)
if i < j
then m ← b(i + j)/2c
return max{Max(A, i, m), Max(A, m + 1, j)}
A = {8, 5, 4, 6, 1, 3, 7}
divisione
8 54 45 61 16 37 37
fusione
5 4 6 1 3 4
(
2T (n/2) + f (n) se n > 1
T (n) =
1 se n = 1
Metodo iterativo
T (n) = 1 + T (n/2)
= 1 + 1 + T (n/4)
= 1 + 1 + 1 + T (n/8)
= 1 + 1 + 1 + 1 + T (n/16)
= ···
= k + T (n/2k )
Metodo iterativo
T (n) = 1 + T (n/2)
= 1 + 1 + T (n/4)
= 1 + 1 + 1 + T (n/8)
= 1 + 1 + 1 + 1 + T (n/16)
= ···
= k + T (n/2k )
Continuiamo a srotolare la ricorsione fin quando n/2k = 1, i.e.
quando k = log2 n. Allora:
T (n) = n + T (n/2)
= n + n/2 + T (n/4)
= n + n/2 + n/4 + T (n/8)
= n + n/2 + n/4 + n/8 + T (n/16)
T (n) = n + T (n/2)
= n + n/2 + T (n/4)
= n + n/2 + n/4 + T (n/8)
= n + n/2 + n/4 + n/8 + T (n/16)
1−(1/2)log n
= n 1−(1/2)
+1
1
= 2n(1 − 2log n
) +1
= 2n(1 − n1 ) + 1 = 2n − 1 = Θ(n)
Esempio
(
n + 2T (n/2) se n > 1
T (n) =
1 se n = 1
T(n) n
T(n/2) T(n/2)
(a) (b)
n/2 n/2
Alberi di ricorsione
n/2 n/2
(d)
Alberi di ricorsione
0 n
1 n/2 n/2
k T(1) T(1) T(1) T(1) T(1) T(1) T(1) T(1) T(1) T(1) T(1) T(1) T(1) T(1) T(1) T(1)
Alberi di ricorsione
2i × n/2i = n
Alberi di ricorsione
Quale è il costo complessivo della chiamata T (n)?
k
X k
X
T (n) = costo livello(i) = n = n · (k + 1)
i=0 i=0
Ci rimane da determinare il valore di k
Ricapitolando
T (n) = O(n)
T (n) = n + T (n/2)
≤ n + cn/2
= n(1 + c/2) se scegliamo c ≥ 21
≤ cn
1
Infatti se c ≥ 2, allora 1 ≤ c/2 e 1 + c/2 ≤ c/2 + c/2 = c
T (n) = n + 2T (n/2)
a = b = 2, logb a = 1
f (n) = Θ(n) = Θ(nlogb a )
(caso 2 del teorema master)
⇓
T (n) = Θ(nlogb a log2 n) = Θ(n log2 n)
T (n) = c + 9T (n/3)
a = 9, b = 3, logb a = log3 9 = 2
f (n) = c = O(n) = O(nlogb a−ε ) = O(n2−ε ) con ε = 1
(caso 1 del teorema master)
⇓
T (n) = Θ(nlogb a ) = Θ(n2 )
T (n) = n + 3T (n/9)
√
a = 3, b = 9, logb a = log9 3 = 1/2 (3 = 9 = 91/2 )
f (n) = n = Ω(n) = Ω(nlog9 3+ε ) con ε = 1/2
inoltre,
af (n/b) = 3f (n/9) = 3(n/9) = 1/3n ≤ cf (n), per c = 1/3
(caso 3 del teorema master)
⇓
T (n) = Θ(f (n)) = Θ(n)