思想:将原问题分解为几个规模较小但类似于原问题的子问题,递归地求解这些子问题,然后再合并这些子问题的解来建立原问题的解。
三个步骤:分解、解决、合并。
分析分治算法:若问题规模足够小,如对某个常量,,则求解需要常量时间。假设将原问题分解为个子问题,每个子问题的规模为原问题的(在许多分治算法中)。分解时间,合并时间。
递归式:
求解递归式三种方法:
一、代入法:猜测一个界,然后用数学归纳法证明这个界是正确的。
二、递归树求解:将递归式转换为一棵树,其结点表示不同层次的递归调用产生的代价。然后采用边界和技术来求解递归式;
三、主定理:可求解形如如下公式的递归式的界:
其中;
一、代入法
1.猜测解的形式;
2.用数学归纳法求出解中的常数,并证明解是正确的。
可以用代入法为递归式建立上界或下界,或。
二、递归树
在递归树中,每个结点表示一个单一子问题的代价,子问题对应某次递归函数的调用。将树中每层中的代价求和,得到每层代价,然后将所有层的代价求和得到总代价。
递归树最合适用来生成好的猜测,然后用代入法来验证猜测是否正确。
三、主定理
理解:对于三种情况中的每一种都是用与进行比较。直觉上,两者中的较大者决定了递归式的解。在第一种情况中,不仅仅是小于就够了,而是要多项式意义上的小于。即渐进小于要相差一个因子()。在第三种情况中,也是多项式意义上的大于,而且满足“正则”条件。注意:这三种情况并不是覆盖的所有可能性,比如虽然大于或小于但不是多项式意义上的大于或小于(例如:),以及不满足正则条件,就不能使用主方法求解递归式。