1、分治算法的设计思想
例子:二分检索;二分归并,Hanio塔;
-基本思想:
1)将原问题划分或者归结于规模更小的子问题;
2)递归或者迭代求解每个子问题(独立求解);
3)将子问题的解综合到原问题的解答;
注意事项:
1)子问题的和原问题的性质是完全一样的;
2)子问题之间独立求解,互不干扰;
3)递归停止的时候,子问题需要足够的小,我们有直接求解的算法!
2、二分检索算法;
算法 :Bianary Search ( T, l , r , x )
输入::数组T、下标从 l 到 r、数x;
输出:j //如果x在数组T中,j为下标,否则为0.
1.l =1;r =n;
2.while l<=r do
3.m=[((l+r)/2)]最后向下取整;m是中间位置;
4.if T[m]=x then return m; //找到了
5.else if T[m]<x then l=m+1;
6.else r=m-1;
7.return 0; //没找到
二分检索的思想:
1.通过x和中位数比较,将原问题划分为规模减半的子问题,再对子问题进行二分检索,当子问题的规模为1时,直接T[m]和x比较,相等则返回下标m,否则返回0.
二分检索的时间复杂度:
3、二分归并排序:
1、分治算法的一般描述:
4、芯片测试:
2、快速排序
3、改进分治算法的途径:
减少子问题:通过子问题之间的依赖关系来减少独立子问题的处理。
增加预处理;