本章共介绍了3种方法来求解递归式的时间复杂度。
方法一:代换法(猜测+证明)
即猜出Tn的复杂度后,代入原来的式子进行检验。
如:Tn = 2T(n/2)+n 中:
①猜测Tn = O(n*lgn),即Tn≤c*n*lgn;
②然后证明2T(n/2)+n≤c*nlgn即可,其中T(n/2)=c*(n/2)*lg(n/2)。
方法二:递归树
按式子迭代出一棵树之后,将每一层的和累加起来得到A,再计算叶子结点(即尾结点)的和B,A+B就是整个递归程序的复杂度
方法三:主方法(Master method)
简单来说就是套公式法,对于Tn=aT(n/b)+f(n)来说,只需比较An=n^(logba)和f(n);
①An>f(n),Tn = Θ(An);
②An=f(n),Tn = Θ(An*lgn);
③An<f(n),Tn = Θ(f(n));
当然,这三种情况并没有包含所有的Tn=aT(n/b)+f(n),原因有二:
①以上的>、=和<均为多项式意义上的;
如:对于任意的ξ>0,n^ξ > O(lgn)
②对于上面的情况③,在大多数情况下是正确的,但是不严格保证其正确性。