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=12T(โŒŠn2โŒ‹)+dnn>1

da cui si ottiene

T(n)=ฮ˜(nlogโกn)

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)={1nโ‰ค14T(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
logโกnโˆ’1 n2logโกnโˆ’1 n2logโกnโˆ’1 4logโกnโˆ’1 2logโกnโˆ’1โ‹…n
logโกn 1 T(1) 4logโกn 4logโกn

Come si risolve?

T(n)=โˆ‘i=0penultimo livellocosto livello[i]+costo ultimo livello=โˆ‘0logโกnโˆ’12iโžserie geometricaโ‹…n+4logโกn=nโ‹…2logโกnโˆ’12โˆ’1+4logโกn=n(nโˆ’1)+2logโกn2=n2โˆ’n+n2=2n2โˆ’n=ฮ˜(n2)

Esempio 2)

T(n)={1nโ‰ค14T(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
logโกnโˆ’1 n2logโกnโˆ’1 (n2logโกnโˆ’1)3 4logโกnโˆ’1 4logโกnโˆ’1(n2logโกnโˆ’1)3
logโกn 1 T(1) 4logโกn 4logโกn

Come si risolve?

T(n)=โˆ‘i=0penultimo livellocosto livello[i]+costo ultimo livello=โˆ‘i=0logโกnโˆ’14iโ‹…(n2i)3+4logโกn=n3โ‹…โˆ‘i=0logโกnโˆ’122i23i+n2=n3โ‹…โˆ‘i=0logโกnโˆ’1(12)i+n2โ‰คn3โ‹…โˆ‘i=0โˆž(12)iโžserie geometrica+n2โ‰ค2n3+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โ‰ค?1โ‹…cโ‡”โˆ€cโ‰ฅ1 โœ…

IPOTESI INDUTTIVA: โˆ€k<n:T(k)โ‰คck
PASSO DI INDUZIONE: Dimostriamo la disequazione per T(n):

T(n)=T(โŒŠn2โŒ‹)+nโ‰คcโŒŠn2โŒ‹+nโ‰คcn2+n=n(c2+1)โ‰ค?cnโ‡”(c2+1)โ‰คcโ‡”cโ‰ฅ2

Abbiamo provato che T(n)โ‰คcn

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

ร‰ possibile dimostrare facilmente che T(n)=ฮฉ(n):

T(n)=(โŒŠn2โŒ‹)+nโ‰ฅnโ‰ฅ?dn

che รจ vera per ogni dโ‰ค1.

Esempio 2 - Interpretazione errata

T(n)={1nโ‰ค1T(nโˆ’1)+n

Si puรฒ facilmente intuire che T(n)=ฮ˜(n2) visto che T(n)=n+(nโˆ’1)+(nโˆ’2)ย +ย ...ย +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(nโˆ’1)+nโ‰คc(nโˆ’1)+nโ‰ค(c+1)nโˆ’cโ‰ค(c+1)nโ‰ค?cnโ‡’c+1โ‰คc

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

Esempio 3 - Caso base errato

T(n)={1nโ‰ค19T(โŒŠ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โŒ‹)+nโ‰ค9c(โŒŠn3โŒ‹)2+nโ‰ค9c(n29)+n=cn2+nโ‰ฐcn2

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

IPOTESI INDUTTIVA: โˆƒc>0:T(k)โ‰คc(k2โˆ’k),โˆ€k<n
PASSO DI INDUZIONE: Dimostriamo la disequazione per T(n):

T(n)=9T(โŒŠn3โŒ‹)+nโ‰ค9c((โŒŠn3โŒ‹)2โˆ’n3)+nโ‰คcn2โˆ’3cn+nโ‰ค?cn2โˆ’cnโ‡”cโ‰ฅ12

Perfetto, non ci resta che dimostrare il passo base

CASO BASE: Dimostriamo la disequazione per T(1)
T(1)=1โ‰ค?c(12โˆ’1)=0 โŒ

Per T(1) non funziona, proviamo allora per i successivi:
T(2)=9T(23)+2=9T(0)+2=9+2=11โ‰ค?c(22โˆ’2)โ‡”cโ‰ฅ112
T(3)=9T(33)+3=9T(1)+3=9+3=12โ‰ค?c(32โˆ’3)โ‡”cโ‰ฅ2
T(4)=9T(43)+4=9T(1)+4=9+4=13โ‰ค?c(42โˆ’4)โ‡”cโ‰ฅ1312
T(5)=9T(53)+5=9T(1)+5=9+5=14โ‰ค?c(52โˆ’5)โ‡”cโ‰ฅ1420
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 aโ‰ฅ1 e bโ‰ฅ2, e c, ฮฒ costanti reali tali che c>0 e ฮฒโ‰ฅ0. Sia T(n) data dalla relazione di ricorrenza:

T(n)={dnโ‰ค1aT(nb)+cnฮฒn>1

allora

T(n)={ฮ˜(nlogbโกa)logbโกa>ฮฒฮ˜(nlogbโกalogโกn)logbโกa=ฮฒฮ˜(nฮฒ)logbโกa<ฮฒ

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)={โˆ‘1โ‰คiโ‰คhaiT(nโˆ’i)+cnฮฒn>mฮ˜(1)n<mโ‰คh

Posto a=โˆ‘1โ‰คiโ‰คhai, allora:

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

Esempi

Ricorrenza a ฮฒ Risultato
T(n)=T(nโˆ’10)+n2 1 2 ฮ˜(n3)
T(n)=T(nโˆ’2)+T(nโˆ’1)+1 2 0 ฮ˜(2nโ‹…n0)
T(n)=3T(nโˆ’69)+4T(n)+n 7 1 ฮ˜(7nโ‹…n)

Teorema 3 - Master Theorem Esteso)

MasterTheorem.png1300