Mungkin ada saat-saat ketika Anda menemukan perulangan aneh seperti ini:
Jika Anda seperti saya, Anda akan menyadari bahwa Anda tidak dapat menggunakan Teorema Master dan kemudian Anda mungkin berpikir, " hmmm ... mungkin analisis pohon perulangan bisa bekerja. " Maka Anda akan menyadari bahwa pohon mulai menjadi sangat cepat. Setelah beberapa pencarian di internet Anda melihat metode Akra-Bazzi akan berfungsi! Kemudian Anda benar-benar mulai melihat ke dalamnya dan menyadari Anda tidak benar-benar ingin melakukan semua matematika. Jika Anda seperti saya sampai saat ini, Anda akan senang mengetahui ada cara yang lebih mudah.T(n)={c2T(n5)+4T(n7)+cnn<7n≥7
Teorema Perpecahan Tidak Rata Bagian 1
Biarkan dan menjadi konstanta positif.ck
Kemudian biarkan menjadi konstanta positif sehingga .{a1,a2,…,ak}∑k1ai<1
Kita juga harus memiliki pengulangan formulir (seperti contoh kita di atas):
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}
Klaim
Kemudian saya mengklaim mana adalah konstanta (misalnya linear asimptotik) dan:T(n)≤bnb
b=c1−(∑k1ai)
Bukti oleh Induksi
Dasar :n<max{a−11,a−12,…,a−1k}⟹T(n)≤c<b<bn
Induksi : Asumsikan true untuk setiap , yang kemudian kita milikin′<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□
Maka kita memiliki .T(n)≤bn⟹T(n)=O(n)
Contoh
T(n)={c2T(n5)+4T(n7)+cnn<7n≥7
Kami pertama-tama memverifikasi koefisien di dalam panggilan rekursif berjumlah kurang dari satu:
1>∑1kai=15+15+17+17+17+17=25+47=3435
Kami selanjutnya memverifikasi bahwa kasus dasar kurang dari maks dari invers koefisien-koefisien:
n<max{a−11,a−12,…,a−1k}=max{5,5,7,7,7,7}=7
Dengan kondisi ini terpenuhi, kita tahu mana adalah konstan sama dengan:
Oleh karena itu kami memiliki:
T(n)≤bnbb=c1−(∑k1ai)=c1−3435=35c
T(n)∧T(n)∴T(n)≤35cn≥cn=Θ(n)
Teorema Perpecahan Tidak Rata Bagian 2
Demikian pula kita dapat membuktikan batasan ketika . Buktinya akan mengikuti banyak format yang sama:∑k1=1
Biarkan dan menjadi konstanta positif sehingga .ckk>1
Kemudian biarkan menjadi konstanta positif sehingga .{a1,a2,…,ak}∑k1ai=1
Kita juga harus memiliki pengulangan formulir (seperti contoh kita di atas):
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}
Klaim
Kemudian saya mengklaim (kita memilih basis karena akan menjadi faktor percabangan dari pohon rekursi) di mana dan adalah konstanta (misalnya linearitmik yang asimptotik) ) seperti yang:T(n)≤αnlogkn+βnlogkkαβ
β=c
dan
α=c∑k1ailogka−1i
Bukti oleh Induksi
Dasar :n<max{a−11,a−12,…,a−1k}⟹T(n)≤c=β<αnlogkn+βn
Induksi : Asumsikan true untuk setiap , yang kemudian kita milikin′<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□
Maka kita memiliki .T(n)≤αnlogkn+βn⟹T(n)=O(nlogn)
Contoh
Mari kita modifikasi contoh sebelumnya yang kita gunakan sedikit saja:
T(n)={c2T(n5)+4T(n7)+T(n35)+cnn<35n≥35
Kami pertama-tama memverifikasi koefisien di dalam panggilan rekursif dengan satu:
1=∑1kai=15+15+17+17+17+17+135=25+47+135=3535
Kami selanjutnya memverifikasi bahwa kasus dasar kurang dari maks dari invers koefisien-koefisien:
n<max{a−11,a−12,…,a−1k}=max{5,5,7,7,7,7,35}=35
Dengan kondisi ini terpenuhi, kita tahu mana dan adalah konstanta yang sama dengan:
Oleh karena itu kami memiliki:
T(n)≤αnlogn+βnβ=cαb=c∑k1ailogka−1i=c2log755+4log777+log73535≈1.048c
T(n)∴T(n)≤1.048cnlog7n+cn=O(nlogn)