Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Ricorrenze
Nel caso di algoritmi ricorsivi (ad esempio, merge sort, ricerca binaria, ricerca
del massimo e/o del minimo), il tempo di esecuzione può essere descritto da una
funzione ricorsiva, ovvero da un’equazione che descrive una funzione in termini
del suo valore con input più piccoli. Esempio
(
2T (n/2) + n se n > 1
T (n) =
1 se n = 1
T (n) = c + T (n/2)
= c + c + T (n/4) = dopo due passi
= c + c + c + T (n/8) dopo tre passi
= c + c + c + c + T (n/16) = dopo quattro passi
= ...
= kc + T (n/2k ) dopo k passi
18 3 Ricorrenze
−(1 − n) + n = (n − 1) + n = 2n − 1 = Θ(n)
3.
T (n) = n3 + 3T (n/3)
= n3 + 3 (n/3)3 + 3T (n/9)
8 1
= n3 1 − log n + n
9 9 3
3.2 Metodo dell’albero di ricorsione 19
T ( n2 ) T ( n2 )
ossia, una rappresentazione grafica del fatto che il costo di una chiamata di
T (n) è pari n3 più il costo di due chiamate di T (n/2)
• in maniera simile, espandiamo i nodi relativi alle due chiamate di T (n/2)
ottendo
n3
( n2 )3 ( n2 )3
T ( n4 ) T ( n4 ) T ( n4 ) T ( n4 )
n3
( n2 )3 ( n2 )3
h = log n ( n4 )3 ( n4 )3 ( n4 )3 ( n4 )3
( n8 )3 ( n8 )3 ( n8 )3 ( n8 )3 ( n8 )3 ( n8 )3 ( n8 )3 ( n8 )3
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 − 1 · ( 1 )lg n
4 3 1 1 lg n
n3 3
4
= 4
n 1 − · =
4
3 4 4
4 3 1 1 4 3 1 1
n 1 − · lg n = n 1 − · lg 4 =
3 4 4 3 4 n
4 3 1 1 4 1
n 1 − · 2 = n3 − n = Θ(n3 )
3 4 n 3 3
3.2 Metodo dell’albero di ricorsione 21
T ( n4 ) T ( n2 )
(a)
cn
cn cn
4 2
T ( 16
n
) T ( n8 ) T ( n8 ) T ( n4 )
(b)
cn
cn cn
4 2
cn cn cn cn
16 8 8 4
T ( 64
n
) T ( 32
n
) T ( 32
n
) T ( 16
n
) T ( 32
n
) T ( 16
n
) T ( 16
n
) T ( n8 )
(c)
cn
cn cn
4 2
cn cn cn cn
h = log 4 n 16 8 8 4
cn cn cn cn cn cn cn cn k = log n
64 32 32 16 32 16 16 8
(d)
T ( n4 ) T ( n4 ) T ( n4 )
(a)
√
n
√ √ √
n n n
2 2 2
T ( 16
n
) T ( 16
n
) T ( 16
n
) T ( 16
n
) T ( 16
n
) T ( 16
n
) T ( 16
n
) T ( 16
n
) T ( 16
n
)
(b)
√
n
√ √ √
n n n
2 2 2
k = log4 n
√ √ √ √ √ √ √ √ √
n n n n n n n n n
4 4 4 4 4 4 4 4 4
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
(c)
√
Fig. 3.3. Albero di ricorsione per T (n) = 3T (n/4) + n
T (n) = n3 + 3T ( n3 )
≤ n3 + 3c( n3 )3 per ip. induttiva T ( n3 ) ≤ c( n3 )3
= n3 + 19 cn3
= (1 + 91 c)n3
≤ cn3
L’ultima disuguaglianza è vera solo se la costante c è scelta in maniera tale
che 1 + 91 c ≤ c, ossia se c − 91 c ≥ 1, il che implica 89 c ≥ 1 e quindi c ≥ 98 .
Ricapitolando se scegliamo c ≥ 89 e n0 = 1, allora T (n) ≤ cn3 per ogni n ≥ n0 .
Exercise 3.6. Si consideri la seguente ricorrenza
3.3 Medoto della sostituzione 25
(
T (n/2) + log n se n > 1
T (n) =
1 se n = 1
T (n) = 2T ( n−3
2
)+n
≤ 2(c 2 log( n−3
n−3
2
)) + n
≤ 2(c n2 log( n2 )) + n
≤ cn(log n − 1) + n
= cn log n − cn + n
= cn log n − n(c − 1) poichè c ≥ 1
≤ cn log n
Ricapitolando, se scegliamo la costante c ≥ 1, T (n) ≤ cn log n per ogni n ≥
n0 = 2
(2) Per definizione T (n) = Ω(n log n) se esistono delle costanti positive c, n0 tali
che T (n) ≥ cn log n per ogni n ≥ n0 . Procediamo per induzione su n.
Casi base
• n = 1: T (1) = 1 ≥ c1 log 1 = 0
• n = 2: T (2) = 1 ≥ c · 2 log 2 = 2c se scegliamo c ≤ 21 .
• n = 3: T (3) = 1 ≥ c · 3 log 3 = 3c log 3. Poichè 3c log 3 ≤ 3c log 4 = 6c,
c ≤ 61 implica 3c log 3 ≤ 6c ≤ 1. Possiamo sceglire c ≤ 16 ≤ 21
Passo induttivo: n > 3
3.4 Metodo dell’esperto 27
T (n) = 2T ( n−3
2
)+n
n−3
≥ 2(c 2 log( n−3 2
)) + n
= c(n − 3) log( n−32
)+n poichè n > 3 implica n−3 2
≥ n8
n
≥ c(n − 3) log( 8 ) + n
= c(n − 3)(log n − 3) + n
= c[n log n − 3n − 3 log n + 9] + n
= cn log n − 3cn − 3c log n + 9c + n
≥ cn log n − 3cn − 3c log n + n
= cn log n + (1 − 3c)n − 3c log n se c ≤ 16 , 1 − 3c ≥ 1 − 3 · 61 = 21
1
≥ cn log n + 2 n − 3c log n se c ≤ 61 , −3c ≥ −3 · 61 = − 12
≥ cn log n + 12 n − 12 log n
≥ cn log n + 12 (n − log n)
≥ cn log n
Ricapitolando, se scegliamo la costante positiva c ≤ 1/6, T (n) ≥ cn log n per
ogni n ≥ n0 = 1
3.5 Misti
Exercise 3.12. Trovare un limite superiore ed inferiore per la seguente ricorrenza
√
T (n) = n + 1
T (n) = n2 log n + 4T ( n2 )
= n2 log n + 4[( n2 )2 log n2 + 4T ( n4 )]
= n2 log n + n2 (log n − 1) + 16T ( n4 ) dopo 2 passi
= n2 log n + n2 (log n − 1) + 16[( n4 )2 log n4 + 4T ( n8 )]
= n2 log n + n2 (log n − 1) + n2 (log n − 2) + 64T ( n8 ) dopo 3 passi
2 2 2 n 2 n n
= n log n + n (log n − 1) + n (log n − 2) + 64[( 8 ) log 8 + 4T ( 16 )]
= n2 log n + n2 (log n − 1) + n2 (log n − 2) + n2 (log n − 3) + 256T ( 16
n
) dopo 4 passi
= ...
Pk−1
= n2 i=0 (log n − i) + 4k T ( 2nk )
n
Ci fermiamo quando 2k
= 1 e quindi quando k = log n. Allora
log n−1
X
2
T (n) = n (log n − i) + 4log n
i=0
Ora:
log n
• 4P = nlog 4 = n2
log n−1 Plog n log n(log n+1)
• i=0 (log n − i) = (ponendo j = log n − i) j=1 j= 2
Quindi:
log n−1
2
X log n(log n + 1)
T (n) = n (log n − i) + 4log n = n2 + n2 = Θ(n2 (log n)2 )
i=0
2
2
in generale, log na = a log n
30 3 Ricorrenze
Soluzione. ⌊ n2 ⌋ ≥ n−1
2
implica ⌊ n2 ⌋ − 1 ≥ n−1
2
−1= n−3
2
Soluzione.
T (n) = T (n − 2) + 3
= 2[2T (n − 4) + 3] + 3 = 4T (n − 4) + 2 · 3 + 3 dopo 2 passi
= 4[2T (n − 6) + 3] + 3 = 8T (n − 6) + 4 · 3 + 2 · 3 + 3 dopo 3 passi
= 8[2T (n − 8) + 3] + 3 = 16T (n − 8) + 8 · 3 + 4 · 3 + 2 · 3 + 3 dopo 4 passi
= ...
k−1
= 2k T (n − 2k) +
P i
2 ·3 dopo k passi
i=0
⌊n ⌋−1 ⌊n ⌋−1 n
⌊n ⌋
X2
i ⌊n ⌋
X2
i ⌊n ⌋ 1 − 2⌊ 2 ⌋
T (n) = 2 2 + 2 ·3=2 2 +3· 2 =2 2 +3·
i=0 i=0
1−2
n n n
= 2⌊ 2 ⌋ + 3 · (2⌊ 2 ⌋ − 1) = 4 · 2⌊ 2 ⌋ − 3
n n n
Ora: ⌊ n2 ⌋ ≤ n
2
implica T (n) = 4 · 2⌊ 2 ⌋ − 3 ≤ 4 · 2 2 − 3 = O(2 2 )
C
Altri esercizi sulle ricorrenze