Il peut arriver que vous rencontriez une étrange récurrence comme celle-ci:
Si vous êtes comme moi, vous réaliserez que vous ne pouvez pas utiliser le théorème maître et vous pourrez alors penser: " hmmm ... peut-être qu'une analyse d'arbre de récurrence pourrait fonctionner. " Vous réaliseriez alors que l’arbre commence à devenir très brut. Après quelques recherches sur Internet, vous verrez que la méthode Akra-Bazzi fonctionnera! Ensuite, vous commencez réellement à examiner la situation et vous réalisez que vous ne voulez pas vraiment faire tous les calculs. Si vous avez été comme moi jusqu'à présent, vous serez ravi de savoir qu'il existe un moyen plus simple.T(n)={c2T(n5)+4T(n7)+cnn<7n≥7
Le théorème de la division inégale, partie 1
Soit et des constantes positives.ck
Soit alors des constantes positives telles que .{a1,a2,…,ak}∑k1ai<1
Nous devons également avoir une récurrence du formulaire (comme notre exemple ci-dessus):
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}
Prétendre
Ensuite, je revendique où est une constante (par exemple, asymptotiquement linéaire) et:T(n)≤bnb
b=c1−(∑k1ai)
Preuve par induction
Base :n<max{a−11,a−12,…,a−1k}⟹T(n)≤c<b<bn
Induction : Vrai pour n'importe quel , on a alorsn′<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□
Alors nous avons .T(n)≤bn⟹T(n)=O(n)
Exemple
T(n)={c2T(n5)+4T(n7)+cnn<7n≥7
Nous vérifions d’abord les coefficients des appels récursifs dont la somme est inférieure à un:
1>∑1kai=15+15+17+17+17+17=25+47=3435
Nous vérifions ensuite que le cas de base est inférieur au max des inverses des coefficients:
n<max{a−11,a−12,…,a−1k}=max{5,5,7,7,7,7}=7
Avec ces conditions remplies, nous savons où est une constante égale à:
Nous avons donc:
T(n)≤bnbb=c1−(∑k1ai)=c1−3435=35c
T(n)∧T(n)∴T(n)≤35cn≥cn=Θ(n)
Le théorème de la division inégale, partie 2
De même, nous pouvons prouver une limite pour quand . La preuve suivra beaucoup du même format:∑k1=1
Soit et des constantes positives telles que .ckk>1
Soit alors des constantes positives telles que .{a1,a2,…,ak}∑k1ai=1
Nous devons également avoir une récurrence du formulaire (comme notre exemple ci-dessus):
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}
Prétendre
Alors je réclame (nous choisissons base car sera le facteur de branchement de l’arbre de récursion) où et sont des constantes (par exemple asymptotiquement linéarithmique ) tel que:T(n)≤αnlogkn+βnlogkkαβ
β=c
et
α=c∑k1ailogka−1i
Preuve par induction
Base :n<max{a−11,a−12,…,a−1k}⟹T(n)≤c=β<αnlogkn+βn
Induction : Vrai pour n'importe quel , on a alorsn′<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□
Alors nous avons .T(n)≤αnlogkn+βn⟹T(n)=O(nlogn)
Exemple
Modifions cet exemple précédent que nous avons utilisé juste un petit peu:
T(n)={c2T(n5)+4T(n7)+T(n35)+cnn<35n≥35
Nous vérifions d’abord les coefficients dans les appels récursifs dont la somme est égale à un:
1=∑1kai=15+15+17+17+17+17+135=25+47+135=3535
Nous vérifions ensuite que le cas de base est inférieur au max des inverses des coefficients:
n<max{a−11,a−12,…,a−1k}=max{5,5,7,7,7,7,35}=35
Avec ces conditions remplies, nous savons où et est une constante égale à:
Nous avons donc:
T(n)≤αnlogn+βnβ=cαb=c∑k1ailogka−1i=c2log755+4log777+log73535≈1.048c
T(n)∴T(n)≤1.048cnlog7n+cn=O(nlogn)