Moltiplicazione di interi e relazioni di ricorrenza Punto della situazione • 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 (di cui abbiamo visto un primo esempio): – Unrolling – Alberi di ricorsione – Sostituzione (per induzione) • Esiste poi il Master Theorem (che vedremo oggi) Sommario • L’esempio dell’algoritmo Divide-et-Impera per la moltiplicazione di matrici • Vari esempi di analisi di algoritmi ricorsivi • Master Theorem (senza dimostrazione e facoltativo) Analisi algoritmi ricorsivi Si usano le stesse regole, tranne che il tempo per le chiamate ricorsive, non conoscendolo esplicitamente, lo lasceremo indicato T(…). Otterremo così una relazione di ricorrenza per T(n), da risolvere in risolvere in seguito, con i metodi che stiamo studiando. Altri esempi di analisi di algoritmi ricorsivi Non ci interessa cosa calcoli ma quanto tempo impiega Supponiamo che il tempo per eseguire qualcosa sia c n-1 do n-1 c(n-1) altrimenti Nota: visto per MergeSort con a = c = 2 Master Theorem facoltativo Applicazioni del Master Theorem Confrontare f(n) con nlogba: qual è «più grande»? Il più grande (asintoticamente e polinomialmente) vince! Esempio 1: T(n)= 2 T(n/2)+ log n: a = b = 2, f(n)= log n vs nlogba = nlog22 = n1 f(n)=O(n 1-ε ) per ε=1/2, quindi T(n)= Θ(n) Esempio 2: T(n)= 2 T(n/2)+ n: a=b=2, f(n)= n vs nlogba= nlog22= n1 f(n)= Θ(n ), quindi T(n)= Θ(n log n) Esempio 3: T(n)= 2 T(n/2)+ n3: a=b=2, f(n)= n3 vs nlogba= nlog22= n1 f(n)= Ω(n 1+ε ) e inoltre 2(n/2) 3≤ cn 3 per c= 2>1 quindi T(n)= Θ(n3) Da ricordare: serie geometrica