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

第2章 递归及分治策略v3.ppt

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

* * STRAITMAXMIN算法的一种简单改进形式: procedure STRAITMAXMIN1(A,n,max,min) integer i,n max←min←A(1) for i←2 to n do if A(i) max then max←A(i) endif else if A(i) min then min←A(i) endif repeat end STRAITMAXMIN1 这使得, 最好情况:按递增次序排列,元素比较次数为n-1次 最坏情况:按递减次序排列,元素比较次数为2(n-1)次 平均情况:元素比较次数为3(n-1)/2次 * * 2. 分治求解策略 记问题的一个实例为: I = (n, A(1), … , A(n)) 采用二分法将I分成两个子集合处理 I1 = ( , A(1), …,A( )),和 I2 = (n- , A( +1), …, A(n)) 则有, MAX(I) = max(MAX(I1),MAX(I2)) MIN(I) = min(MIN(I1),MIN(I2)) 采用递归的设计策略,得到以下算法: * * 3. 一种递归求解策略 算法 递归求取最大和最小元素 procedure MAXMIN(i,j,fmax,fmin) //A(1:n)是含有n个元素的数组,参数I,j是整数,1≤i,j≤n // //该过程把A(i:j)中的最大和最小元素分别赋给fmax和fmin // integer i,j;global n,A(1:n) case :i=j: fmax←fmin←A(i) //只有一个元素 :i=j-1:if A(i)A(j) then fmax←A(j);fmin←A(i) else fmax←A(i);fmin←A(j) //两个元素的情况 endif :else: mid← //取中 call MAXMIN(i,mid,gmax,gmin) call MAXMIN(mid +1,j,hmax,hmin) fmax←max(gmax,hmax); fmin←min(gmin,hmin) end case end MAXMIN * * 例:在A(1:9) = (22,13,-5,-8,15,60,17,31,47)上执行算法2.6 每个结点内的值分别是: i, j, fmax, fmin 递归调用 递归调用分解过程 递归调用的返回 * * 性能分析(T(n)表示元素比较数) 0 n=1 T(n) = 1 n=2 n2 当n是2的幂时(n=2k),化简上式有, T(n)=2T(n/2) +2 =2(2T(n/22) + 2) + 2 = 22T(n/22 ) + 22 + 2 = 22(2T(n/23 )+2)+22+2 = 23T(n/23 )+23+22+2 =……= 2k-1T(n/2k-1 ) +(2k-1+…+22+21) = 2k-1T(2) +(2k-1+…+22+21) = n/2 + (2k – 1 – 1) = n/2 + n – 2 = 3n/2 – 2 * * 性能分析 1)与STRAITMAXMIN算法相比,比较次数减少了25% (3n/2-2 : 2n-2)。 已经达到了以元素比较为基础的找最大最小元素的算法 计算时间的下界: 2)存在的问题: 空间占用量大 ? 有 级的递归,入栈参数: ? i, j, fmax, fm

文档评论(0)

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

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

1亿VIP精品文档

相关文档