17 Feb 2024, 10:58 AM
17 Feb 2024, 10:58 AM

Equazioni di ricorrenza

Quando si calcola la complessità di un algoritmo ricorsivo, questa viene espressa tramite un’equazione di ricorrenza, ovvero una formula matematica definita in maniera... ricorsiva!

Un esempio è il Merge Sort:

T(n)={cn=1  2T(n2)+dnn>1

da cui si ottiene

T(n)=Θ(nlogn)

Analizziamo quindi i diversi metodi per risolvere ricorrenze, ossia:

Analisi per livelli

“Srotoliamo” la ricorrenza in un albero i cui nodi rappresentano i costi ai vari livelli della ricorsione.

Esempio 1)

T(n)={1n14T(n2)+nn>1

Analizziamo cosa succede ad ogni livello:

Livello Dimensione Costo chiamata N. chiamate Costo livello (costo chiamate x n. chiamate)
0 n n 1 n
1 n2 n2 4 4n2=2n
2 n4 n4 16 16n4=4n
i n2i n2i 4i 2in
logn1 n2logn1 n2logn1 4logn1 2logn1n
logn 1 T(1) 4logn 4logn

Come si risolve?

T(n)=i=0penultimo livellocosto livello[i]+costo ultimo livello=0logn12iserie geometrican+4logn=n2logn121+4logn=n(n1)+2logn2=n2n+n2=2n2n=Θ(n2)

Esempio 2)

T(n)={1n14T(n2)+n3n>1

Analizziamo cosa succede ad ogni livello:

Livello Dimensione Costo chiamata N. chiamate Costo livello (costo chiamate x n. chiamate)
0 n n3 1 n3
1 n2 (n2)3 4 4(n2)3
2 n4 (n4)3 16 16(n4)3
i n2i (n2i)3 4i 4i(n2i)3
logn1 n2logn1 (n2logn1)3 4logn1 4logn1(n2logn1)3
logn 1 T(1) 4logn 4logn

Come si risolve?

T(n)=i=0penultimo livellocosto livello[i]+costo ultimo livello=i=0logn14i(n2i)3+4logn=n3i=0logn122i23i+n2=n3i=0logn1(12)i+n2n3i=0(12)iserie geometrica+n22n3+n2

Possiamo quindi affermare che T(n)=O(n3), ossia la complessità di T(n) è al massimo cubica. La dimostrazione precedente però non afferma che T(n)=Θ(n3), perché ad un certo punto siamo passati a .
Possiamo notare però che T(n)(n3) , visto che nell'equazione di ricorrenza c'è un + n3. Quindi è possibile affermare che T(n)=Ω(n3) e quindi T(n)=Θ(n3).

Analisi per tentativi (o per sostituzione)

È un metodo in cui si cerca di “indovinare” (guess) una soluzione, in base alla propria esperienza, e si dimostra che questa soluzione è corretta tramite induzione.

Esempio 1 - Intuizione corretta

T(n)={1n=1T(n2)+nn>1

Se siamo furbi possiamo notare che T(n)=n+n2+n4+... 2n, tentiamo quindi di provare che T(n)=O(n)

CASO BASE: Dimostriamo la disequazione per T(1)
T(1)=1?1cc1

IPOTESI INDUTTIVA: k<n:T(k)ck
PASSO DI INDUZIONE: Dimostriamo la disequazione per T(n):

T(n)=T(n2)+ncn2+ncn2+n=n(c2+1)?cn(c2+1)cc2

Abbiamo provato che T(n)cn

Abbiamo quindi provato che T(n)=O(n)

É possibile dimostrare facilmente che T(n)=Ω(n):

T(n)=(n2)+nn?dn

che è vera per ogni d1.

Esempio 2 - Interpretazione errata

T(n)={1n1T(n1)+n

Si può facilmente intuire che T(n)=Θ(n2) visto che T(n)=n+(n1)+(n2) + ... +1
Quindi:

T(n)=i=1ni=n(n+1)2=Θ(n2)

Ma se sbagliassimo l'intuizione?
Tentiamo per esempio di dimostrare che T(n)=O(n):

T(n)=T(n1)+nc(n1)+n(c+1)nc(c+1)n?cnc+1c

Come possiamo vedere la disequazione risulta impossibile, dunque T(n)O(n).

Esempio 3 - Caso base errato

T(n)={1n19T(n3)+nn>1

Tentiamo di dimostrare che T(n)=O(n2)

IPOTESI INDUTTIVA: c>0:T(k)ck2,k<n
PASSO DI INDUZIONE: Dimostriamo la disequazione per T(n):

T(n)=9T(n3)+n9c(n3)2+n9c(n29)+n=cn2+ncn2

Mannaggia, se non ci fosse quel + n...
Cerchiamo allora di dimostrare un'ipotesi induttiva più stretta:

IPOTESI INDUTTIVA: c>0:T(k)c(k2k),k<n
PASSO DI INDUZIONE: Dimostriamo la disequazione per T(n):

T(n)=9T(n3)+n9c((n3)2n3)+ncn23cn+n?cn2cnc12

Perfetto, non ci resta che dimostrare il passo base

CASO BASE: Dimostriamo la disequazione per T(1)
T(1)=1?c(121)=0

Per T(1) non funziona, proviamo allora per i successivi:
T(2)=9T(23)+2=9T(0)+2=9+2=11?c(222)c112
T(3)=9T(33)+3=9T(1)+3=9+3=12?c(323)c2
T(4)=9T(43)+4=9T(1)+4=9+4=13?c(424)c1312
T(5)=9T(53)+5=9T(1)+5=9+5=14?c(525)c1420
T(6)=9T(63)+6

Non è necessario andare oltre, perchè T(6) dipende da T(2) che è già stato dimostrato.
Concludiamo che T(n)=O(n2)

Per riassumere

Attenzione

Metodo dell'esperto (o delle ricorrenze comuni)

Esiste un’ampia classe di ricorrenze che possono essere risolte facilmente facendo ricorso ad alcuni teoremi, ognuno dei quali si occupa di una classe particolare di equazioni di ricorrenza.

Teorema 1 - Master Theorem)

Siano a e b costanti intere tali che a1 e b2, e c, β costanti reali tali che c>0 e β0. Sia T(n) data dalla relazione di ricorrenza:

T(n)={dn1aT(nb)+cnβn>1

allora

T(n)={Θ(nlogba)logba>βΘ(nlogbalogn)logba=βΘ(nβ)logba<β

Teorema 2)

Siano a1,a2, ... ,ah costanti intere non negative, con h costante positiva, c e β costanti reali tali che c>0 e β0, e sia T(n) definita dalla relazione di ricorrenza:

T(n)={1ihaiT(ni)+cnβn>mΘ(1)n<mh

Posto a=1ihai, allora:

In parole povere, sommi tutti i coefficienti di T(n).

Esempi

Ricorrenza a β Risultato
T(n)=T(n10)+n2 1 2 Θ(n3)
T(n)=T(n2)+T(n1)+1 2 0 Θ(2nn0)
T(n)=3T(n69)+4T(n)+n 7 1 Θ(7nn)

Teorema 3 - Master Theorem Esteso)

MasterTheorem.png|1300