算法系列之分治

                                                      算法系列之分治(分而治之)


       分治算法的基本思想是将一个规模为N的问题分解为K个规模较小的子问题,这些子问题相互独立且与原问题性质相同。求出子问题的解,就可得到原问题的解。即:

使用分治算法的问题必须满足一下要求:

1.此问题可以被分解为多个与原问题性质相同的子问题(子问题是原问题的规模缩小到一定的程度就可以容易地解决的)

2.子问题的解可以合并成原问题的解

3.各个子问题之间是独立的,没有包含公共解



原问题在分解过程中,递归地求解子问题

由于递归都必须有一个终止条件,因此,当分解后的子问题规模足够小时,应能够直接求解


可使用分治法求解的一些经典问题
 
(1)二分搜索
(2)大整数乘法
(3)Strassen矩阵乘法
(4)棋盘覆盖
(5)合并排序
(6)汉诺塔
(7)快速排序
(8)线性时间选择
(9)最接近点对问题
(10)循环赛日程表

说再多,也没有来几个例子讲解更让人能理解,so 例子来了

一个简单的二分查找帮助理解,


L=(3,12,24,37,45,53,61,78,90,100 ),查找Key=24的记录

mid=(low+high)/2向下取整,即如 mid=(1+4)/2=2


            3     12 24 37     45      53 61 78 90   100

           low                      mid                             high

  2445  继续在前半个表中用二分查找法查找

            3       12     24     37               45  53 61 78 90 100

             low    mid                high

2412 继续在后半个表中用二分查找法查找

            3 12  24                37              45 53 61 78 90 100

                       low(mid)      high 

即查到mid=24,故结束(此过程在编码中一般用递归向下查找)



  
  
  1. int BinSearch(int Array[],int low,int high,int key)  //key为要找的值
  2. {  
  3.     if (low<=high)  
  4.     {  
  5.         int mid = (low+high)/2;  
  6.         if(key == Array[mid])  
  7.             return mid;  
  8.         else if(key<Array[mid])  
  9.             return BinSearch(Array,low,mid-1,key);  
  10.         else if(key>Array[mid])  
  11.             return BinSearch(Array,mid+1,high,key);  
  12.     }  
  13.     else  
  14.         return -1;  
















  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值