一、分治法的设计思想
将一个难以直接求解的大问题,分解成若干个规模较小的子问题,递归地求解这些子问题,然后合并子问题的解得到原问题的解。
注意:
1.子问题与原问题形式相同
2.子问题可以彼此独立的求解,即子问题之间不包含公共的子问题
3.子问题的规模缩小到一定程度就可以容易地直接求解
二、分治法的求解过程
划分子问题:将原问题分解为若干个规模较小,相互独立,与原问题形式相同的子问题。
求解子问题:若子问题规模较小而容易被解决则直接求解,否则递归地求解各个子问题。
合并子问题:将各个子问题的解合并为原问题的解。
分治法的一般算法描述:
在用分治法设计算法时,最好使子问题的规模大致相同。换句话说,将一个问题分成大小相等的k个子问题的处理方法是行之有效的。
当k=1时称为减治法。
许多问题可以取 k=2,称为二分法,这种使子问题规模大致相等的做法是出自一种平衡子问题的思想,它几乎总是比子问题规模不等的做法要好。
三、分治算法的时间复杂度分析方法
按照递归算法的分析过程,首先建立递归方程,然后求解递归方程
划分阶段的时间复杂性
分解为a 个子问题。
每个子问题大小为n/b。
假设划分时间=D(n)
求解子问题阶段的时间复杂性
递归调用
时间= aT(n/b)
合并子问题的解阶段的时间复杂性
假设合并时间=C(n)。