一、减治法
1、基本思想
减治法,即减而治之(Decrease-and-conquer)
为求解一个大规模的问题,可以将其划分为两个子问题:其一平凡,另一规模缩减,分别求其子问题,由子问题的解,得到原问题的解。
2、实例:数组求和
用一简单的例子,数组求和,分别使用减而治之和分而治之的思想来实现,互相对比,容易理解。
int sum (int A[],int lo,int hi) {
int mid = (lo+hi) >> 1;
if (lo == hi) return A[lo];
return sum(A,lo,mid) + sum(A,mid+1,hi);
}
二、分治法
即分而治之(Divided-and-conquer)一、基本思想
为求一个大规模的问题,可以将其划分为若干(通常两个)子问题,规模大体相当,分别求子问题,由子问题的解,得到原问题的解。
二、实例:数组求和
int sum (int A[],int n){
return n < 1 ? 0 : sum (A,n-1) + A[n-1];
}