主定理浅层证明
算法设计课程从开始一直没跟上,一上来求解递归方程的递推展开式就给我整的很乱,今天总结一下主定理这个好方法的证明
对于分治里面的一个递推方程常常以下列的形式给出:
T (n) = aT(n/b)+f(n) (其中f(n) = n^d)
它其实对应一棵递归树:
如图所示——————————————– >
f(n) //第零层合并问题需要的时间
f(n/b) f(n/b) ………………. //第一层合并问题需要的时间(这一层共a个)
f(n/b^k) ………….//第k层 显然有ak 个
综上
T(n) = nd + (n/b)d * a + (n/b2 )d * a2 +…………. (n/bk )d * ak
整理一下
T (n) = nd + nd * a/bd +………………. nd * (a/bd ) k
显然 是一个等比求和 对公比进行分类讨论就可以得到最终的结果了~~
记公比 为q
当q等于1时 即 a ==bd 时 T(n) = nd k 带入k 故如下所示
T ( n ) = n d ∗ l o g a b T(n) = n^d *log_ab T(n)=nd∗logab
同理 当q>1 的时候
T (n) = (a \over b^d) k * nd
代入k可知
T ( n ) = ( a ) ( l o g b n ) T(n) = (a ) ^(log_b^n) T(n)=(a)(logbn)
q<1 时候 显然有
T ( n ) = n d T (n) = n^d T(n)=nd
综上理解推导过程,可以现用现证 ,减少记忆量