先贴出两个初中数学公式
使用换根公式和对数倒数性质可以得出这样的结论:
alogbn=nlogba
等比数列求和公式:
Sn=anq−a1q−1
这个关于f(n)的公式可以估计满足分治关系的函数的阶:如果f(n)=af(nb)+g(n)那么有:
f(n)=akf(1)+∑j=0k−1ajg(nbj)
主定理(MasterTheorem):
设f是满足递推关系:
的增函数,其中n=bk,k是一个正整数,
O(nd) a<bd
O(ndlogn) a=bd
O(nlogba) a>bd
怎么证明呢?可以分为三种情况来证明:
- a<bd
- a=bd
- a>bd
首先可以将f(n)=akf(1)+∑k−1j=0ajg(nbj),代入主定理递推关系,因为g(n)=cnd,可以得到
f(n)=akf(1)+c∑j=0k−1aj(nbj)d=akf(1)+c∑j=0k−1aj(nbj)d
由于n=bk,所以k=logbn
优先考虑a=bd的情况:
f(n)=akf(1)+c∑j=0k−1aj(nbj)d=akf(1)+c∑j=0k−1aj(nbj)d=(bd)logbnf(1)+cnd∑j=0k−1(bd)jb−jd=ndf(1)+cndk=ndf(1)+cndlogbn
所以a=bd时,f(n)是O(ndlogn)
然后是a≠bd的情况,使用等比数列求和公式可以做出如下推导:
f(n)=akf(1)+c∑j=0k−1aj(nbj)d=akf(1)+c∑j=0k−1aj(nbj)d=akf(1)+cnd∑j=0k−1(abd)j=akf(1)+((abd)k−1)cndbda−bd=akf(1)+(abd)logbncbdnda−bd+ndbdcbd−a=nlogbaf(1)+(abd)logbncbdnda−bd+ndbdcbd−a=nlogbaf(1)+nlogbabdcbdnda−bd+ndbdcbd−a=nlogbaf(1)+nlogban−dcbdnda−bd+ndbdcbd−a=nlogbaf(1)+nlogbacbda−bd+ndbdcbd−a=nlogbaf(1)+nlogban−dcbdnda−bd+ndbdcbd−a=C1nd+C2nlogba
这里C1=bdcbd−a, C2=f(1)+bdca−bd
我们还可以推导出结论:
当a<bd
logba<logbbd=d
当a>bd
logba>logbbd=d
同时使用已经得出的结论f(n)=C1nd+C2nlogba,可以完成证明
O(nd) a<bd
O(nlogba) a>bd
至此,主定理的证明全部完成。