分治法适用范围

  • 取值很大,直接求解十分困难;
  • 个输入拆分成 个不同的子集,可以得到 个可求解的子问题;
  • 在找出子问题的解后,能够通过某种方法将它们合并为整体问题的解。

分治法求解思路

整体思想: 将总体问题 分而治之,十分适合使用递归的方法进行求解

  • 分:子问题与原问题有相同特征,但规模更小;
  • 治:反复利用分治策略,直到可以直接求解子问题;
  • 合:将子问题的解组合成原问题的解。

分治法的时间复杂度

分治法的时间复杂度直接计算较为复杂,通常利用主定理进行计算。

为子问题个数, 为问题的缩小规模, 为分解与合并的代价,分治法的时间复杂度可以表示为:

其中,根据 的不同数量级,可以认为 收敛于不同数量级的复杂度:

举例

二分查找

问题描述

已知一个非降序 ,判断元素 是否位于其中。若是,则返回对应的位置。

分治法分析

  1. 分: 取一个下标 ,记
  2. 治:
    • ,则问题解决,位置为
    • ,则在 中解决;
    • ,则在 中解决
  3. 合: 子问题的解就是全局问题的解

时间复杂度分析

根据主定理,,其中,,即