Ci possono essere momenti in cui ti imbatti in una strana ricorrenza come questa:
Se sei come me, ti renderai conto che non puoi usare il Teorema del Maestro e poi potresti pensare " hmmm ... forse potrebbe funzionare un'analisi dell'albero di ricorrenza ". Quindi ti accorgeresti che l'albero inizia a ingrassare molto velocemente. Dopo alcune ricerche su Internet vedi che il metodo Akra-Bazzi funzionerà! Quindi in realtà inizi a esaminarlo e ti rendi conto che non vuoi davvero fare tutta la matematica. Se sei stato come me fino a questo punto, sarai entusiasta di sapere che c'è un modo più semplice.T(n)={c2T(n5)+4T(n7)+cnn<7n≥7
Teorema della divisione irregolare Parte 1
Sia e costanti positive.ck
Quindi lascia che siano costanti positive tali che .{a1,a2,…,ak}∑k1ai<1
Dobbiamo anche ricorrere al modulo (come nel nostro esempio sopra):
T(n)T(n)≤c≤cn+T(a1n)+T(a2n)+…T(akn)0<n<max{a−11,a−12,…,a−1k}n≥max{a−11,a−12,…,a−1k}
Richiesta
Quindi rivendico dove è una costante (ad es. Asintoticamente lineare) e:T(n)≤bnb
b=c1−(∑k1ai)
Prova per induzione
Base :n<max{a−11,a−12,…,a−1k}⟹T(n)≤c<b<bn
Induzione : supponiamo vero per qualsiasi , quindi abbiamon′<n
T(n)≤cn+T(⌊a1n⌋)+T(⌊a2n⌋)+⋯+T(⌊akn⌋)≤cn+b⌊a1n⌋+b⌊a2n⌋+⋯+b⌊akn⌋≤cn+ba1n+ba2n+⋯+bakn=cn+bn∑1kai=cn−cn∑k1ai1−(∑k1ai)+cn∑k1ai1−(∑k1ai)=cn1−(∑k1ai)=bn□
Quindi abbiamo .T(n)≤bn⟹T(n)=O(n)
Esempio
T(n)={c2T(n5)+4T(n7)+cnn<7n≥7
Per prima cosa verifichiamo che i coefficienti all'interno delle chiamate ricorsive si a meno di uno:
1>∑1kai=15+15+17+17+17+17=25+47=3435
Successivamente verifichiamo che il caso base è inferiore al massimo degli inversi dei coefficienti:
n<max{a−11,a−12,…,a−1k}=max{5,5,7,7,7,7}=7
Con queste condizioni soddisfatte, sappiamo che dove è una costante uguale a:
Pertanto abbiamo:
T(n)≤bnbb=c1−(∑k1ai)=c1−3435=35c
T(n)∧T(n)∴T(n)≤35cn≥cn=Θ(n)
Teorema della divisione irregolare parte 2
Allo stesso modo possiamo dimostrare un limite per quando . La prova seguirà gran parte dello stesso formato:∑k1=1
Sia e costanti positive tali che .ckk>1
Quindi lascia che siano costanti positive tali che .{a1,a2,…,ak}∑k1ai=1
Dobbiamo anche ricorrere al modulo (come nel nostro esempio sopra):
T(n)T(n)≤c≤cn+T(a1n)+T(a2n)+…T(akn)0<n<max{a−11,a−12,…,a−1k}n≥max{a−11,a−12,…,a−1k}
Richiesta
Quindi rivendico (scegliamo base perché sarà il fattore di ramificazione dell'albero di ricorsione) dove e sono costanti (ad es. Asintoticamente linearitmico ) tale che:T(n)≤αnlogkn+βnlogkkαβ
β=c
e
α=c∑k1ailogka−1i
Prova per induzione
Base :n<max{a−11,a−12,…,a−1k}⟹T(n)≤c=β<αnlogkn+βn
Induzione : supponiamo vero per qualsiasi , quindi abbiamon′<n
T(n)≤cn+T(⌊a1n⌋)+T(⌊a2n⌋)+⋯+T(⌊akn⌋)≤cn+∑1k(αainlogkain+βain)=cn+αn∑1k(ailogkain)+βn∑1kai=cn+αn∑1k(ailogkna−1i)+βn=cn+αn∑1k(ai(logkn−logka−1i))+βn=cn+αn∑1kailogkn−αn∑1kailogka−1i+βn=αn∑1kailogkn+βn=αnlogkn+βn□
Quindi abbiamo .T(n)≤αnlogkn+βn⟹T(n)=O(nlogn)
Esempio
Modifichiamo l'esempio precedente che abbiamo usato solo un pochino:
T(n)={c2T(n5)+4T(n7)+T(n35)+cnn<35n≥35
Verifichiamo innanzitutto che i coefficienti all'interno delle chiamate ricorsive si sommano a uno:
1=∑1kai=15+15+17+17+17+17+135=25+47+135=3535
Successivamente verifichiamo che il caso base è inferiore al massimo degli inversi dei coefficienti:
n<max{a−11,a−12,…,a−1k}=max{5,5,7,7,7,7,35}=35
Con queste condizioni soddisfatte, sappiamo che dove e è una costante uguale a:
Pertanto abbiamo:
T(n)≤αnlogn+βnβ=cαb=c∑k1ailogka−1i=c2log755+4log777+log73535≈1.048c
T(n)∴T(n)≤1.048cnlog7n+cn=O(nlogn)