- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
算法分析与设计 第2章【荐】.ppt
2000年1月25日 北京化工学院信息基础教研室 算法设计方法 吴哲辉 崔焕庆 马炳先 吴振寰 编著 机械工业出版社 第2章 分治与递归算法 2.1 分治与递归算法的基本思路 分治法(Divide and Conquer)的基本思想是:对于一个规模为n的问题,如果可以直接解决,则直接解决之;否则,将该问题分解为若干个规模较小的子问题,这些子问题相互独立且与原问题性质相同,递归解决这些子问题,然后将它们的解合并,就可以得到原问题的解。可以发现,分治法解决一个问题可以分为“分”和“治”两个阶段,而且整个过程使用的是递归的思想。因此,通常都是利用递归方式进行描述。 2.1 分治与递归算法的基本思路 算法2.1 分治法的抽象描述 输入:待求解的问题P; 输出:结果S。 DivideandConquer(P) { //分治法求解问题P if (Small(P)) return (Solve(P)); else { divide P into k subproblems: ; for (i=1; i=k; i++) si= DivideandConquer(pi); S = Merge( ); return (S); } } 2.1 分治与递归算法的基本思路 例2.1 最大值最小值问题。 算法2.2 二分法求解最大值和最小值 输入:为待查找的数组; 输出:max和min返回的最大值和最小值。 void MaxMin(*A, i, j, *max, *min) { if (i == j) *max = *min = A[i]; else if (j-i == 1) { *max = (A[i] A[j] ? A[i] : A[j]); *min = (A[i] A[j] ? A[j] : A[i]); } else { mid = (i+j) / 2; MaxMin(A, i, mid, LeftMax, LeftMin); MaxMin(A, mid+1, j, RightMax, RightMin); *max = (LeftMax RightMax ? LeftMax : RightMax); *min = (LeftMin RightMin ? LeftMin : RightMin); }} 2.2 查找中的分治与递归算法 二分查找算法 对于有序数组的查找,可以通过设计分治算法提高效率。假设排列顺序为非降序。二分查找的基本思想是:将具有n个元素的数组A,取其中间元素 与待查元素k比较,如果 ,则在A中找到k,退出;如果 ,则在数组的前半部分中查找k;否则在数组的后半部分中查找k。重复此过程,直到确定k不在A中,或者在A中找到k为止。 2.2 查找中的分治与递归算法 算法2.3 二分查找的非递归算法 输入:A为待查找数组,k为待查找元素,n为A中元素个数; 输出:返回值为-1表示k不在A中,否则表示k在A中的位置。 int BinarySearch(*A, n, k) { //在由n个元素组成的数组A中查找元素k left = 1; right = n; while (left = right) { middle = (left + right) / 2; if (k == A[middle]) return (middle); else if (k A[middle]) left = middle + 1; else right = middle - 1; } return (-1); } 2.2 查找中的分治与递归算法 复杂性分析 1. 最坏时间复杂性。设W(n)表示在最坏情况下对具有n个元素的有序序列进行二分查找时的比较次数。 则: 可证明: 2.2 查找中的分治与递归算法 复杂性分析 2. 平均时间复杂性。假设M(n)表示在平均情况下,对于具有n个元素的有序序列A利用二分方法查找k时的比较次数。令Sr表示需要比较r次的输入的个数。且n=2m-1,则: 2.2 查找中的分治与递归算法 二叉树查找 二叉查找树(Binary Search Tree),又称为二叉排序树(Binary Sort Tree),它是一个二叉树,其结点与给定待查找数组中的元素一一对应,要求每一个结点v对应的元素要大于v的左子树任意一个结点对应的元素值,而小于v的右子树任意一个结点对应的元素值。如图2.1所示就是两个二叉查找树。
文档评论(0)