关于算法估计:注意这个c是一个positive constants,可以由我们选择,但必须是常数
第二个要注意的地方是:运用代入法的时候,我们必须要在结论中证明出和归纳假设严格一致的形式,比如我们假设T(n)=nlgn,那么我们最后必须要能证明出T(n)<=cnlogn(c为常数),如果证明出T(n)<=cnlogn+n是不能说明归纳假设正确的
【代入法】代入法首先要对这个问题的时间复杂度做出预测,然后将预测带入原来的递归方程,如果没有出现矛盾,则是可能的解,最后用数学归纳法证明。
【举 例】我们有如下的递归问题:T(n)=4T(n/2)+O(n),我们首先预测时间复杂度为O(n2),不妨设T(n)=kn2(其中k为常数),将该结果带入方程中可得:左=kn2,右=4k(n/2)2+O(n)=kn2+O(n),由于n2的阶高于n的阶,因而左右两边是相等的,接下来用数学归纳法进行验证即可。
【迭代法】迭代法就是迭代的展开方程的右边,直到没有可以迭代的项为止,这时通过对右边的和进行估算来估计方程的解。比较适用于分治问题的求解,为方便讨论起见,给出其递归方程的一般形式:
【举 例】下面我们以一个简单的例子来说明:T(n)=2T(n/2)+n2,迭代过程如下:
容易知道,直到n/2^(i+1)=1时,递归过程结束,这时我们计算如下:
到这里我们知道该算法的时间复杂度为O(n2),上面的计算中,我们可以直接使用无穷等比数列的公式,不用考虑项数i的约束,实际上这两种方法计算的结果是完全等价的,有兴趣的同学可以自行验证。