二分法解决金块问题.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
* * * * 报告人:段喜娟 赵珊珊 钟 梅 赵亚文 2 算法设计与分析 报告2 算法设计与分析实验报告 分而治之算法 —— 二分法解决金块问题 分治法概述 1 内容提要 典型二分法 2 分金块问题 3 算法分析与总结 4 分治法概述 1 一 分治法 把一个难于直接解决的大问题分解为若干个“相似”的小问题,再解所有小问题,然后把小问题的解“合并”,从而得到大问题的解。即:分治法是递归设计方法的一种具体策略。 二 适合分治法策略的问题 当求解一个输入规模为n且取值又相当大的问题时,我们可以将这n个数据分解成k个不同的可以独立求解的子问题,这些子问题与原问题具有相似的结构,利用递归或循环机制求解。 三 分治法的应用 折半查找,合并排序,快速排序,二叉树遍历,二叉排序树的查找等算法。 典型二分法 2 二分法描述: 在算法设计中每次一个问题分解成的子问题个数一般是固定的,每个子问题的规模也是平均分配的。当每次都将问题分解为原问题规模的一半时,成为二分法。如图2-1所示: 子问题二 子问题一 子问题三 子问题四 子问题五 子问题六 原问题 …… 图2-1 二分法示意图 分金块问题 3 一 金块问题描述: 老板有n个金块,希望最优秀的雇员得到其中最重的一块,最差的雇员得到其中最轻的一块。假设有一台比较重量的仪器,如何用最少的比较次数找出最重和最轻的金块?以9以内的实例理解问题。 问题:1.最重的是那块?用max标记 2.最轻的是那块?用min标记 分金块问题 3 二 算法设计 ① 蛮力法的思想:对金块逐个的进行比较查找,先拿两块比较重量,留下重的一个与下一块比较,知道全部比较完毕,就找到了最重的一块。算法描述如下: Maxmin(float a[],int n) {max=a[1];min=a[1]; for(i=2;i=n;i=i+1) {if(maxa[i]) max=a[i] else if(mina[i]) min=a[i] } Return(max, min) } 分金块问题 3 ② 二分法思想: ⑴ 假设只有一个金块,重10克,则不需要比较轻重,最重者和最轻 者是同一个金块。即比较0次。 ⑵ 假设有2个金块,一个重10克,另一个重16克,则需要比较1 次,可以把最重者和最轻者确定下来。 ⑶ 当有多个金块时(假设6块),则用二分法对其分解,直到分解为(1)或(2)的情形时,问题很容易解决。 假设6个金块重量如下(以找最轻金块为例): 2 6 4 3 8 1 一分为二(两组): 【2 6 4】 【3 8 1】 一分为二(四组): 【2 6】【4】 【3 8】【1】 解较小子问题: 2 4 3 1 合并子问题解: 2 1 lmin rmin ? 分金块问题 3 分金块问题 3 ③ 用二分法解决金块问题算法设计步骤: 问题抽象、简化为:在n个元素的集合中寻找最大和最小值元素。 (1)将集合一分为二,变为两个集合,目的是在较小的两个集合中分别找最大、最小元素。 (2)递归分解较小集合,直到每个集合中的元素个数≤2,然后找出小集合的最大、最小元素。 (3)合并(回溯):自低向上把子问题的解合并,大元素中取最大者,小元素中取最小者,最后得到元问题的解。 ⑤用二分法解决金块问题算法描述: Float a[n]; Maxmin(int I,int j,float fmax,float fmin) {int mid; float lmax,lmin,rmax,rmin; if (i=j) {fmax=a[i];fmin=a[i];} 分金块问题 3 i j 分金块问题 3 用二分法解决金块问题算法描述(续):

文档评论(0)

zxli + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档