分治策略(Divide and Conquer)
- 将原始问题划分或者归结为规模较小的子问题
- 递归或者迭代求解每个子问题
- 将子问题的解综合得到原问题的解
注意:
- 子问题和原始问题性质完全一样
- 子问题之间可以彼此独立的求解
- 递归停止时子问题可以直接求解
分治算法设计模式的一般描述
devide-and-conquer(P) {
if( |p|<=n0 ){
adhoc(P)
};
divide P into smaller subinstances P1,P2,`````PK;
for( i = 1;i <=k ;i++){
yi = divide-and-conquer(Pi);
};
rerturn merge(y1,y2,.....,yk);
}
其中,|p|表示问题P的规模;n0为不需要再分解问题的阈值;adhoc是基本子算法,可以直接求解;merge用于将子问题的解合并为原问题的解。
分治策略的特点
- 将原问题规约为规模小的子问题,子问题与原问题具有相同的性质
- 子问题规模足够小时,可以直接求解
- 子问题的解综合得到原问题的解
- 算法可以递归,也可以迭代实现
- 算法的分析方法:递推方程
- 算法实现:递归或者迭代