常用十种算法
2 分治算法
算法介绍:分支法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,在把子问题的解合并。这个技巧是很多高效算法的基础,入排序算法(快速排序、归并排序)等
分治算法的基本步骤:
分治算法在每一层递归上都有三个步骤:
- 分解:将原问题分解成若干个规模较小,相互独立,于原问题形式相同的子问题;
- 解决:若子问题规模较小而容易被解决则直接解决掉,否则递归地拆解各个子问题;
- 合并:将各个子问题的解合并为原问题的解。
分治算法的设计模式:
Divide(P){
/**
P表示问题的规模
n0表示阈值,表示当问题P的规模不超过n0时,问题已容易解决,不必在继续分解。ADHOC(P)时该分治法中的基本子算法;
*/
if(P < n0){
then return ADHOC(P);
}
//将P分解为较小的子问题P1 P2...Pk
for P -> p1...Pk
//递归解决Pi
yi=Divide(Pi);
//合并子问题,用于将P的子问题P1\P2\..PK的相应解合并为P的解
result = MERGE(y1,y2...yi);