求解递归式的方法有Akra-Bazzi方法和Strassen方法等等,但是Akra-Bazzi方法有点难用,但它可以求解那些子问题划分不均衡的算法的递归式。主方法很容易使用,但只能用于子问题规模相等的情况。
这几天看了点对递归式进行求解,稍微了解到可以通过主方法很快的把使用分治策略解决的问题的时间复杂度,或者说是解出递归的时间复杂度。大概就是这样子了,下面我们把主方法依赖的定理说一下:
定理1.1(主定理) 领a>=1和b>1是常数,f(n)是一个函数,T(n)是定义在非负整数上的递归式:
T(n)=aT(n/b)+f(n)
其中我们将n/b解释为向上取整n/b或向下取整n/b。那么T(n)有如下渐进界:
有了主方法,我们就可以直接从递归式求解出结果。对于上边的三种情况,我们都是需要将函数f(n)和进行比较。感觉上就是,两个函数较大者就决定了递归式的解。若函数更大,就是上边的情况1;若是函数f(n)更大,就是上边的情况3;若是两个函数大小相当,就是上边的情况2。当然也会有不能通过主方法来求解的递归式,若是想使用主方法对递归式求解,一定要注意函数f(n)和是在多项式意义上进行比较。