算法设计与分析之分治策略
凡治众如治寡,分数是也。 ------《孙子兵法》
分治策略基本思想
将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。
分治策略的算法设计模式
Divide_and_Conquer(P){
if (|P|<=n0 ) return adhoc(P);
divide P into smaller substances P1,P2,…,Pk;
for (i=1; i<=k; k++)
yi=Divide_and_Conquer(Pi) //递归解决Pi
Return merge(y1,y2,…,yk) //合并子问题
}
可用分治策略解决的问题的特征
- 问题的规模缩小到一定的程度就可以容易地解决
- 问题可以分解为若干个规模较小的相同问题
- 利用该问题分解出的子问题的解可以合并为该问题的解
- 问题所分解出的各个子问题是相互独立的