一、分治法的求解过程:
(1)划分:既然是分治,当然需要把规模为n的原问题划分为k个规模较小的子问题,并尽量使这k个子问题的规模大致相同。
(2)求解子问题:各子问题的解法与原问题的解法通常是相同的,可以用递归的方法求解各个子问题,有时递归处理也可以用循环来实现。
(3)合并:把各个子问题的解合并起来,合并的代价因情况不同有很大差异,分治算法的有效性很大程度上依赖于合并的实现。
典型的递推方程:
迭代法可求得
典型案例:
一、全排列问题:
问题:R是由n个元素构成的序列集合,R={r1, r2, … ,rn},求R的全排列perm(R)。
问题理解:
(1) 若R中只有1个元素{r},则perm(R)=(r)
(2) 若R中只有2个元素{r1, r2},则
perm(R)=(r1)perm(R1)∪(r