分治法适用范围
- 取值很大,直接求解十分困难;
- 将 个输入拆分成 个不同的子集,可以得到 个可求解的子问题;
- 在找出子问题的解后,能够通过某种方法将它们合并为整体问题的解。
分治法求解思路
整体思想: 将总体问题 分而治之,十分适合使用递归的方法进行求解
- 分:子问题与原问题有相同特征,但规模更小;
- 治:反复利用分治策略,直到可以直接求解子问题;
- 合:将子问题的解组合成原问题的解。
分治法的时间复杂度
分治法的时间复杂度直接计算较为复杂,通常利用主定理进行计算。
记 为子问题个数, 为问题的缩小规模, 为分解与合并的代价,分治法的时间复杂度可以表示为:
其中,根据 的不同数量级,可以认为 收敛于不同数量级的复杂度:
举例
二分查找
问题描述
已知一个非降序 ,判断元素 是否位于其中。若是,则返回对应的位置。
分治法分析
- 分: 取一个下标 ,记 ;
- 治:
- 若 ,则问题解决,位置为 ;
- 若 ,则在 中解决;
- 若 ,则在 中解决
- 合: 子问题的解就是全局问题的解
时间复杂度分析
根据主定理,,其中,,即