1. 定义
将原问题分解为若干个规模较小但类似于原问题的子问题(Divide),递归的求解这些子问题(Conquer),然后再合并(Combine)这些子问题的解来建立原问题的解。
2. 基本过程
- Divide:将问题的规模变小
- Conquer:递归的处理小规模问题(只需递归调用即可)
- Combine:将小规模问题的解合并为原始问题的解
3. 分治与动态规划的关系
动态规划其实和分治策略是类似的,也是将一个原问题分解为若干个规模较小的子问题,递归的求解这些子问题,然后合并子问题的解得到原问题的解。区别在于这些子问题会有重叠,一个子问题在求解后,可能会再次求解,于是我们想到将这些子问题的解存储起来,当下次再次求解这个子问题时,直接拿过来就是。
其实就是说,动态规划所解决的问题是分治策略所解决问题的一个子集,只是这个子集更适合用动态规划来解决从而得到更小的运行时间。即用动态规划能解决的问题分治策略肯定能解决,只是运行时间长了。综上,结论如下:
- 分治:一般用来解决子问题相互对立的问题,称为标准分治,
- 动态规划:用来解决子问题重叠的问题。