次のような奇妙な再発に遭遇することがあります:
あなたが私のような人なら、マスター定理を使用できないことに気付くでしょう。うーん...多分、再帰ツリー分析が機能するかもしれません。」その後、ツリーが非常に高速になり始めることに気付くでしょう。インターネットで検索すると、Akra-Bazziメソッドが機能することがわかります。それから実際にそれを調べ始め、あなたが本当にすべての計算をしたくないことを悟ります。この時点まであなたが私のようであったなら、もっと簡単な方法があることを知って興奮するでしょう。T(n)={c2T(n5)+4T(n7)+cnn<7n≥7
不均等な分割定理パート1
ましょうと正の定数であること。ck
次に、をような正の定数とします。{a1,a2,…,ak}∑k1ai<1
(上記の例のように)フォームの繰り返しも必要です。
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}
請求
それから、を要求します。ここで、は定数(たとえば、漸近線形)で、T(n)≤bnb
b=c1−(∑k1ai)
帰納法による証明
基礎:n<max{a−11,a−12,…,a−1k}⟹T(n)≤c<b<bn
帰納法: trueと仮定すると、n′<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□
その後、我々は持っている。T(n)≤bn⟹T(n)=O(n)
例
T(n)={c2T(n5)+4T(n7)+cnn<7n≥7
最初に、再帰呼び出し内の係数の合計が1未満になることを検証し。
1>∑1kai=15+15+17+17+17+17=25+47=3435
次に、ベースケースが係数の逆数の最大値より小さいことを確認し:
n<max{a−11,a−12,…,a−1k}=max{5,5,7,7,7,7}=7
これらの条件が満たされると、がわかります。ここで、は次の定数です:
したがって、
T(n)≤bnbb=c1−(∑k1ai)=c1−3435=35c
T(n)∧T(n)∴T(n)≤35cn≥cn=Θ(n)
不均等な分割定理パート2
同様に、場合の限界を証明できます。証明はほとんど同じ形式に従います。∑k1=1
ましょうと、その結果、正定数で。ckk>1
次に、をような正の定数とします。{a1,a2,…,ak}∑k1ai=1
(上記の例のように)フォームの繰り返しも必要です。
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}
請求
私は請求(我々が選択ベースため、再帰ツリーの分岐係数になる)及び定数である(例えば、漸近linearithmic ) そのような:T(n)≤αnlogkn+βnlogkkαβ
β=c
および
α=c∑k1ailogka−1i
帰納法による証明
基礎:n<max{a−11,a−12,…,a−1k}⟹T(n)≤c=β<αnlogkn+βn
帰納法: trueと仮定すると、n′<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□
その後、我々は。T(n)≤αnlogkn+βn⟹T(n)=O(nlogn)
例
我々はほんの小さなビットを使用したこと、前の例を変更してみましょう:
T(n)={c2T(n5)+4T(n7)+T(n35)+cnn<35n≥35
最初に、再帰呼び出し内の係数の合計を1に検証し。
1=∑1kai=15+15+17+17+17+17+135=25+47+135=3535
次に、ベースケースが係数の逆数の最大値よりも小さいことを確認し:
n<max{a−11,a−12,…,a−1k}=max{5,5,7,7,7,7,35}=35
これらの条件が満たされていれば、がわかりここで、およびは次の定数です:
したがって、次のようになります:
T(n)≤αnlogn+βnβ=cαb=c∑k1ailogka−1i=c2log755+4log777+log73535≈1.048c
T(n)∴T(n)≤1.048cnlog7n+cn=O(nlogn)