分治法,字面意思是“分而治之”
把一个问题分成两个或者多个相似的子问题再把子问题分成更小的子问题……直到最后子问题可以简单的直
接求解,原问题的解即子问题的解的合并。这就是分治法,当然这些肯定是我从百度上抄的。
分治法分为以下三个步骤:
(1)将原问题分解为多个子问题。
(2)对子问题递归求解。
(3)将子问题合并为原问题的解
例如:使用分治法求解数组中的最大值:
#define Type int;
Type FindMax(Type arr[], int left, int right) {
assert(arr);
int mid = left + (right - left) / 2;
//递归出口
if(left >= right) {
return arr[l];
}
Type a = FindMax(arr, left, mid);
Type b = FindMax(arr, mid + 1