分治,分而治之;各个击破。
基本思想: 当输入规模n比较大的时候(难以直接解决),划分成等价的k个子问题(可解);
适用条件:
基本步骤:分治法在每一层递归上都有三个步骤:分解、解决、合并;
其一般的算法设计模式如下:
Divide-and-Conquer(P)
1. if |P|≤n0
2. then return(ADHOC(P))
3. 将P分解为较小的子问题 P1 ,P2 ,...,Pk
4. for i←1 to k
5. do yi ← Divide-and-Conquer(Pi) △ 递归解决Pi
6. T ← MERGE(y1,y2,...,yk) △ 合并子问题
7. return(T)
其中|P|表示问题P的规模;n0为一阈值,表示当问题P的规模不超过n0时,
问题已容易直
接解出,不必再继续分解。ADHOC(P)是该分治法中的基本
子算法,用于直接解小规模的
问题P。因此,当P的规模不超过n0时,直
接用算法ADHOC(P)求解。算法MERGE(y1,y2,
...,yk)是该分治法中
的合并子算法,用于将P的子问题P1 ,P2 ,...,Pk的相应的解y1,
y2,...,yk合并为P的解。
复杂性分析:
实例分析--二分查找法(Binary Search)