算法设计与分析第5章.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文档。上传文档
查看更多
4.4 二叉树的遍历及相关特性 1)二叉树的定义:若干顶点的一个有限集合,它要么为空,要么由一个根和两棵称为左子树和右子树的不相交构成,它们分别为根的左右子树. 2)关于二叉树的问题可以应用分治技术来解决 ①计算二叉树的高度的递归算法(树的高度:从叶子到根的最长路径长度.二叉树的高度是根的左、右子树的最大高度加1) ②算法:Height(T) if T=空 return -1 else return max{Height(Tl),Height(TR)}+1 ③算法效率的分析 比较操作与加法操作次数一样,A(n)=n 4.6 用分治法解最近对问题和凸包问题 4.6.1最近对问题 p1=(x1,y1),…,pn=(xn,yn)是平面上n个点构成的集合S,假设n是2的乘方. 遵循分治方法,可以递归地求出左子集S1和右子集S2的最近对.设d1和d2分别是S1和S2的点对中的最小距离,并设d=min{d1,d2}.d不一定是S1和S2中所有对的最小距离. 作为合并较小子问题的解的一个步骤,需要检查这样的点,尝试限制在以x=c为对称的、宽度为2d的垂直带中,因为任何其他点对的距离都大于d。 设c1,c2分别是该垂直带左右部分的点构成的子集。对于c1中的每个点p(x,y),需检查c2中的点和p之间的距离是否小于d。这种点的y轴坐标一定位于区间[y+d,y-d]之间。这样的点不会超过6个,因为c2中的点相互之间的距离至少为d。 可以顺序地处理c1中的点,同时一个指针在c2列表的宽度为2d的区间中来回移动,取出6个后选点,来计算它们和c1当前点p之间的距离。“合并”较小子问题所花的时间M(n)为O(n). T(n)∈O(nlogn) 4.6.2 凸包问题 快包算法 假设p1=(x1,y1),…,pn=(xn,yn)是平面上n个点构成的集合S。 p1pn一定是该集合的凸包顶点。 p1pn是方向从p1到pn的直线,这条直线把点分为两个集合:S1位于直线左侧或在直线上的点构成的集合;S2位于直线右侧或在直线上的点构成的集合。 讨论一下这个所谓的快包算法是如何构造上包 (1)找到S1中顶点Pmax,距离p1pn最远的点;所构成的面积最大 (2)找出S1中所有直线p1pmax左边的点。这些点以及p1和pmax,构成了集合S11。S1中在直线pmaxpn左边的点以及pmax和pn构成了集合S12. (3)可以继续递归构造S11和S12的上包,然后简单地把它们连接起来,以得到S1的上包。 算法分析: 平均效率nlogn 最差效率n2 第五章 减治法 算法设计与分析 主要内容 1、插入排序和拓扑排序 2、深度优先查找和广度优先查找 3、生成组合对象算法 4、减常因子算法 5、减可变规模算法 重点难点 1、重点:减治法的理解 2、难点:减治法的应用 减治法是著名的通用算法设计技术。 减治技术是一个问题给定实例的解和同样问题较小实例的解之间的关系。减治法有3种主要的变种: (1)减去一个常量; (2)减去一个常数因子; (3)减去的规模是可变的; 减常量,每次算法迭代总是从实例规模中减去一个规模相同的常量。(减一技术) 规模为n的问题 规模为n-1的子问题 子问题的解 原问题的解 例:求an的值。 f(n)=f(n-1)*a (n1) f(n)=a (n=1) 减常因子技术意味着在算法的每次迭代中,总是从实例的规模中减去一个相同的常数因子。(常数因子等于二,减半技术) 规模为n的问题 规模为n/2的子问题 子问题的解 原问题的解 例:求an的值 an=(an/2)2 n是正偶数 an=(a(n-1/2))2*a n是大于1的奇数 an=1 n=1 在减治法的可变规模变种中,算法在每次迭代的时候,规模减小的模式都是不同的。比如:计算最大公约数:gcd(m,n)=gcd(n,m mod n) 5.1 插入排序 1)方法:假设对于一个较小数组A[0..n-2]的排序问题已经解决了,怎样把A[n-1]插入到A数组中。 ①从左到右扫描这个有序的子数组,直到遇到第一个大于等于A[n-1]的元素,然后把A[n-1]插到该元素的前面;②从右往左扫描这个有序的子数组,直到遇到第一个小于等于A[n-1]的元素,然后就把A[n-1]插在该元素的后面;③使用折半查找为A[n-1]在有序子数组中找到一个合适的位置。 2)举例说明: 89 45 68 90 29 34 17 45 89 68 90 29 34 17 45 68 89 90 29 34 17 45 68 89 90 29 34 17 29 45 68 89 90 34 17 29 34 45 68

文档评论(0)

178****9325 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档