算法系列:分治法

分治法的基本思想是将一个规模为n的问题分解为k个规模较小的子问题,这些子问题互相独立。递归地解这些子问题,然后将各个子问题的解合并并得到原问题的解。它的一般的算法的设计模式如下:

divide-and-conquer(P)

{

    if(|P|<=n0) adhoc(P);

    divide P into smaller subinstances P1,P2,P3,...,Pk;

    for(i=1;i<=k;i++)

        yi = divide-and-conquer(Pi);

    return merge(y1,y2,y3,...,yk);

}

说明:|P|表示问题P的规模

   n0为一阀值,表示当问题P的规模不超过n0时很容易解决,不必分解

     adhoc(P)是该分治法的基本子算法

     merge()是该分治法的合并子算法的解等到P的解

注意:从人们的大量实践中得出,在使用分治法的时候,最好使子问题的规模大致相同。

好吧,有什么问题的就留言吧,一起探讨,本人也是在学习阶段。。。

你可能感兴趣的:(分治法)