分治算法

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、改进分治算法的途径:

减少子问题:通过子问题之间的依赖关系来减少独立子问题的处理。

增加预处理;

 

posted @ 2020-03-30 17:53  风曳  阅读(436)  评论(0编辑  收藏  举报