分治策略:
1、将原始问题划分或归结为规模较小的子问题。
2、递归或迭代求解每个子问题。
3、将子问题的解综合得到原问题的解。
注意点:子问题的性质不变、子问题可以独立求解(区别于动态规划算法)、
递归停止时子问题可直接求解。
例:二分检索算法
首先将x与中位数进行比较,划分为比x大和比x小两个子问题,比较确定结果在哪个子问题中,再对子问题分别递归调用算法。
当子问题规模为1时,相等则返回当前位置,否则返回0(x不在数组中)。
伪码:
Binary Search(T(数组), l(首元素下标),r(尾元素下标),x)
输入:T、l、r、x
输出:元素下标或0
1.l <- 1; r <-n
2.while l<=r do
3. m <- 下取整((l+r)/2)
4. if T[m] = x then return m
5. else if T[m]>x then r <- m-1
6. else l <- m+1
7.return0
时间复杂度分析:
W(n) = W(n/2)+1 W(1) = 1
解得 W(n) = O(logn)
分治策略的一般伪码描述