Divide and Conquer
分治法是常见的算法设计思路之一,它的核心在于将原问题拆分为数个子问题,子问题与原问题类似,但规模更小,因此更容易解决,最后将子问题合并,即可得到原问题的答案。
一般步骤如下:
- 分解:将原问题分解为k个子问题。
- 解决子问题:递归地处理子问题,直到问题规模足够小。
- 合并:将子问题的解组合成原问题的解。
通过这个方式,我们可以得到关于原问题的递归式,递归式对于求解该算法的时间复杂度很有帮助,其形式通常如下:
T ( n ) = a T ( n / b ) + f ( n ) T(n)=aT(n/b)+f(n) T(n)=aT(n/b)+f(n)
对于这种公式,我们常用主定理求解。
主定理(Master theorem): 令 a ≥ 1 , b > 1 , 且 a 和 b 为 常 数 。 f ( n ) 是 一 个 函 数 , T ( n ) 是 一 个 关 于 非 负 数 n 的 递 归 式 。 令a\ge1, b\gt1, 且a和b为常数。f(n)是一个函数,T(n)是一个关于非负数n的递归式。 令a≥1,b>1,且a和b为常数。f(n)是一个函数,T(n)是一个关于非负数n的递归式。
T ( n ) = a T ( n / b ) + f ( n ) T(n)=aT(n/b)+f(n) T(