网站大量收购闲置独家精品文档,联系QQ:2885784924

分治算法和二分搜索算法.ppt

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

分治法的基本思想二分搜索技术本讲内容:第2讲分治法和二分搜索算法分治法的基本思想分治法的思想:分而治之。将一个规模为n的问题分解为k个规模较小的子问题,这些子问题互相独立且与原问题相同,(如果子问题的规模仍然不够小,则再划分为k个子问题),然后递归的求解这些子问题,最后用适当的方法将各子问题的解合并成原问题的解。原问题(规模为n)子问题1子问题2子问题k…子问题1子问题2子问题k…相同类型合并解子问题1子问题2子问题k…子问题1子问题2子问题k…分治法的基本思想分治法的适用条件分治法所能解决的问题一般具有以下几个特征:该问题的规模缩小到一定的程度就可以容易地解决该问题可以分解为若干个规模较小的相同问题该问题所分解出的各个子问题是相互独立的利用分解出的子问题的解可以合并为该问题的解2-2二分搜索算法前提条件:有一组数已经按从小到大(或从大到小)排序目标:输入一个数x,在这组数查找是否有x二分搜索的步骤:1、确定三个关键下标的初值:bott=0,top=8,mid=(bott+top)/2;2、判断要找的数x是否等于a[mid]①x==a[mid]找到,结束xa[mid]在a[bott]—a[mid-1]之间继续查找xtop=mid-1;mid=(bott+top)/2;③xa[mid]在a[mid+1]—a[top]之间继续查找xbott=mid+1;mid=(bott+top)/2;-15-6079235482101midbotttopa[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]2-2二分搜索算法二分搜索实例:设在数组a中顺序放了以下9个元素:检索x=9,9==a[4],一次比较就成功,最好情况-15-6079235482101a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]①②③③④②③④检索x=-15,-15a[4],-15a[1],-15==a[0],3次比较,成功检索x=101,101a[4],101a[6],101a[7],101==a[8],4次比较,成功检索x=8,8a[4],8a[1],8a[2],8a[3],4次比较,不成功2-2二分搜索算法#includestdio.h#defineN10intfind(inta[],intx,intbott,inttop);voidmain(){inti,x,a[N],result;printf(\n输入数组a:\n);for(i=0;iN;i++)scanf(%d,a[i]);printf(“输入要查找的数x:);scanf(%d,x);result=find(a,x,0,N-1);if(result==-1)printf(%disnotfound.\n,x);elseprintf(Find%d==a[%d]\n,x,result);}迭代法的程序代码//符号常量定义,便于修改数组的大小//函数调用//函数声明*************Returnfib(3)+fib(2)执行的是两次函数调用,而不是1次N=20时,迭代法只需运行19次伪币问题和金块问题引入规模变小,问题不变问题有限分解。一尺之锥,日取其半,万世不竭可合成原问题的解2-1递归法求Fibonacci数列Fibonacci数列:1,1,2,3,5,8,13…迭代法求Fibonacci数列的前20项#includestdio.hvoidmain(){inti,f1=1,f2=1,f3;printf(%8d%8d,f1,f2);for(i=3;i=20;i++){f3=f1+f2;f1=f2;f2=f3;printf(%

文档评论(0)

yingjiali1998 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档