减治法.pptVIP

  1. 1、本文档共25页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
减治法

第五章 减 治 法 减治法的设计思想 查找问题中的减治法 排序问题中的减治法 * * 算法与算法复杂性 王 涛 长春工业大学 计算机科学与工程学院 wangtao690103@163.com 减治是基于变换的思想。 分两个阶段工作,即“变”阶段和“治”阶段. 变治法的三种类型: 1)实例化简(instance simplification) 2)改变表现(representation change) 3)问题化简(problem reduction) problem’s instance simpler instance or Another representation or another problem’s instance solution 图5.1 减治法的典型情况(减半技术) 子问题 的规模是n/2 子问题的解 原问题的解 原问题 的规模是n (1)原问题的解只存在于其中一个较小规模的子问题中; (2)原问题的解与其中一个较小规模的解之间存在某种对应关系。 对于给定的整数a和非负整数n,计算an的值。 利用减治法,如果n=1,可以简单地返回a的值,如果n是偶数并且n1,可以把该问题的规模减半,即计算an/2的值,而且规模为n的解an和规模减半的解an/2之间具有明显的对应关系:an=(an/2)2,如果n是奇数并且n1,可以先用偶指数的规则计算a(n-1),再把结果乘以a。所以,应用减治技术得到如下计算方法: 利用分治法,如果n=1,可以简单地返回a的值,如果n1,可以把该问题分解为两个子问题:计算前 个a的乘积和后 个 a的乘积,再把这两个乘积相乘得到原问题的解。所以,应用分治技术得到如下计算方法: 分治法是对分解的子问题分别求解,需要对子问题的解进行合并,而减治法只对一个子问题求解,并且不需要进行解的合并。应用减治法(例如减半法)得到的算法通常具有如下递推式: 分治法和减治法区别 折半查找 二叉查找树 折半查找 在有序表{ 7, 14, 18, 21, 23, 29, 31, 35, 38, 42, 46, 49, 52 }中查找值为14的记录的过程如图所示。 0 1 2 3 4 5 6 7 8 9 10 11 12 13 图 折半查找成功情况下的查找过程 high=13 设置初始区间 mid=7 high=6 low=1 查找区间为[1, 13] 取中点mid=7 比较r[7]与k,将查找调整到左半区 mid=2 mid=3 low=1 high=2 查找区间为[1, 6] 取中点mid=3 比较 r[3]与k,将查找调整到左半区 mid=1 low=high=2 查找区间为[1, 2] 取中点mid=1 比较r[1]与k,将查找调整到右半区 查找区间为[2, 2] 取中点mid=2 比较r[2]与k,查找成功,返回mid的位置2 low=1 7 14 18 21 23 29 31 35 38 42 46 49 52 折半查找 1. low=1;high=n; //设置初始查找区间 2. 测试查找区间[low,high]是否存在,若不存在,则查找失败;否则 3. 取中间点mid=(low+high)/2; 比较k与r[mid],有以下三种情况: 3.1 若kr[mid],则high=mid-1;查找在左半区进行,转2; 3.2 若kr[mid],则low=mid+1;查找在右半区进行,转2; 3.3 若k=r[mid],则查找成功,返回记录在表中位置mid; 二叉查找树 在二叉查找树中查找关键字值为35,95的过程: 50 30 20 80 90 85 88 40 35 32 50 30 20 80 90 85 88 40 35 32 二叉排序树的查找 BiNode * SearchBST(BiNode *root, int k) { if (root= =NULL) return NULL; else if (root-data==k) return root; else if (kroot-data) return Se

文档评论(0)

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

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

1亿VIP精品文档

相关文档