Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
23 marzo 23
Ricorrenze
• Per analizzare il tempo di esecuzione di un algoritmo,
dobbiamo distinguere il caso degli algoritmi ricorsivi (che
sono tanti, per esempio tutti gli algoritmi basati sul
paradigma divide-et-impera)
• L’analisi di un algoritmo ricorsivo ci porta a dover risolvere
una relazione di ricorrenza per T(n) (o S(n)).
• Dobbiamo imparare come risolverle.
• Esistono vari metodi :
– Unrolling (o iterazione)
– Alberi di ricorsione
– Sostituzione (per induzione)
• Esistono poi un Teorema generale e il Master Theorem
Tempo di esecuzione di Mergesort
Sia T(n) il tempo di esecuzione di
MERGE-SORT su un array di taglia n.
T(n) = ?
Esempio: T(2) = 5
T(n) = 2 T(n/2) + 3n per n=2k, n > 2
T(8) = ???
T(8) = 2T(4) + 3 8
T(4) = 2T(2)+ 3 4
T(2) = 5
T(4) = 10 + 3 4 = 22
T(8) = 44 + 3 8 = 68
E se n = 64, T(n) = ? T(n) = 5 n/2+ 3 n (log2n – 1) per n=2k
Mergesort recurrence.
n=2
T(n) =
Assorted proofs.
We will describe several ways to prove this recurrence.
First, we will solve a simplified recurrence:
T(n) = 2 T(n/2) + (n) con T(2)= (1) per n=2k
6
MergeSort
T(n) = 2 T(n/2) + (n) con T(2)= (1) per n=2k
T(n) = 2 T(n/2) + f(n) dove f(n)= (n), cioè a1n ≤ f(n) ≤ c1n per n>2
T(2)=g(n) dove g(n)= (1), cioè a2 ≤ g(n) ≤ c2
Da T(n) ≤ 2 T(n/2) + cn ricaveremo T(n) =O(n log n), col metodo unrolling.
2
≤ 22 T(n/22) + 2 c n/2 + cn
= 22 T(n/22) + c n + c n = 22 T(n/22) + 2c n
ma T(n/22) ≤ 2T(n/23) + c n/22
≤ 22 (2T(n/23) + c n/22) + 2c n
= 23 T(n/23) + 22 c n/22 + 2c n
= 23 T(n/23) + c n + 2c n = 23 T(n/23) + 3c n
………
Metodo di iterazione (Unrolling)
T(n) ≤ 23 T(n/23) + 3 c n
Andrebbe proseguendo in questo modo
……… provato per dopo i iterazioni avremo
induzione!
≤ c n log2 n
T(n/2) T(n/2)
T(n/2)
cn/2 T(n/2)
cn/2
c n=2
T(n) =
n = 2log2n ≤ 2 log2 n
Abbiamo dimostrato che per n = 2k : T(n) ≤ c n log2 n = c 2k k.
Per n qualsiasi:
T(n) ≤ T(2 log2 n ) ≤ c 2 log2 n log2 n
≤ c 2 (log2 n+1) (log2 n+1)
= 2c n (log2 n+1)
= 2c n log2 n + 2cn se 1 ≤ log2 n, cioè n≥2 allora
≤ 4c n log2 n
da cui T(n) = O(nlog n).
Analogamente posso provare che T(n) =(n log n). 2
Analisi ricorrenza esatta per MergeSort
(induzione)
c n=2
cn
T(n) ≤ cn log2 n
per ogni n 2.
Prova (per esercizio)
Altre relazioni di ricorrenza
Consideriamo la sotto-famiglia
• T(n) = qT(n/2) + cn con T(2)=c
per q=1 allora T(n)= ?
q=2 allora T(n)= Ɵ (n log2n) (MergeSort)
q>2 allora T(n)= ?
• T(n)=2T(n/2) +cn2
T(n)= ?
Metodo di sostituzione per q=1
n-1
c(n-1) altrimenti