分治法的基本思想是将一个规模为n的问题分解成k个规模较小的子问题(最好使子问题规模大致相同),这些子问题相互独立且与原问题相同,递归的解这些子问题,然后将各子问题的解合并到原问题的解,它的一般算法设计模式如下:
Divide-and-Conquer(P)
{
if( |P| <= n0) Adhoc(P);
divide P into smaller subinstances
P1,P2,P3,P4.......,Pk
for(i=1;i<=k;i++)
yi=Divide-and-Conquer(Pi)
return Merge(y1,y2,....yk)
}
其中|P|表示问题P的规模, n0为阈值,表示当问题P的规模不超过n0时,问题容易解决,不必再继续分解 。Adhoc(P)是分治法中的 基本子算法.