- 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章 递归与分治策略 主要内容 2.1 递归的概念 2.2 分治法的基本思想 2.3 二分搜索技术 2.4 大整数的乘法 2.5 Strassen矩阵乘法 2.6 棋盘覆盖 2.7 合并排序 2.8 快速排序 2.9 线性时间选择 2.10 最接近点对问题 2.11 循环赛日程表 学习要点 理解递归的概念。 掌握设计有效算法的分治策略。 通过典型范例,学习分治策略设计技巧。 2.1 递归的概念 递归算法:一个直接或间接地调用自身的算法 递归函数举例(1) 阶乘函数 n != 递归函数举例(2) Ackerman函数 Ackerman函数 A(n,m)的自变量m的每一个值都定义了一个单变量函数: M=0时,A(n,0)=n+2 M=1时,A(n,1)=A(A(n-1,1),0)=A(n-1,1)+2,和A(1,1)=2,故A(n,1)=2*n M=2时,A(n,2)=A(A(n-1,2),1)=2A(n-1,2),和A(1,2)=A(A(0,2),1)=A(1,1)=2,故A(n,2)= 2^n 。 M=3时,类似的可以推出 M=4时,A(n,4)的增长速度非常快,以至于没有适当的数学式子来表示这一函数。 Ackerman函数 单变量的Ackerman函数A(n)定义为 A(n)=A(n,n)。 定义其拟逆函数α(n)为:α(n)=min{k|A(k)≥n}。 递归函数举例(3) 排列问题 产生Perm(R)的递归算法 template class Type void Perm(Type list[], int k, int m) { // Generate all permutations of list[k:m]. if (k = m) { //单元素序列 for (int i = 0; i = m; i ++) cout list[i]; cout endl; } else // list[k: m] 多元素序列,递归产生排列 for (int i = k; i = m; i++) { Swap(list[k], 1ist[i] ); Perm(list, k + 1, m); Swap(list[ k], list[ i] ); } } void Swap(Type a, Type b) //交换a,b 递归函数举例(4) 整数划分问题 将一个正整数n表示成一系列正整数之和, n= n1+n2+…+nk, 其中, n1= n2=…=nk 整数划分问题的递归关系q(n,m) q(n,m):正整数n的不同的划分中,最大加数不大于m的划分个数个数 递归函数举例(5) “Hanoi 塔”问题:设a,b,c是3个塔座。开始时,在塔座a上有一叠共n个圆盘,这些圆盘自下而上,由大到小地叠在一起。各圆盘从小到大编号为1,2,…,n,现要求将塔座a上的这一叠圆盘移到塔座b上,并仍按同样顺序叠置。在移动圆盘时应遵守以下移动规则: 规则1:每次只能移动1个圆盘; 规则2:任何时刻都不允许将较大的圆盘压在较小的圆盘之上; 规则3:在满足移动规则1和2的前提下,可将圆盘移至a,b,c中任一塔座上。 “Hanoi 塔”问题移动次数递推关系 递归程序代价 递归程序每次调用需要分配不同的运行空间,一旦某一层被启用,就要为之开辟新的空间。而当一层执行完毕,释放相应空间掉,退到上一层。 2.2 分治法 分治策略是一种用得最多的一种有效方法 二、分治法算法构架 divide-and-conquer(P) { if ( | P | = n0) adhoc(P); //解决小规模的问题 将 P分解为子问题 P1,P2,...,Pk;//分解问题 for (i=1,i=k,i++) yi=divide-and-conquer(Pi); //递归地解各子问题 return merge(y1,...,yk); //将各子问题的解合并为原问题的解 } 四、代价分析 T(n) = 五、分治法实例 2.3 二分搜索技术 问题:给定已按升序排好序的n个元素a[0:n-1],现要在这n个元素中找出一特定元素x。 2.3 二分搜索技术 给定已排好序的n个元素a[0:n-1],现要在这n个元
您可能关注的文档
最近下载
- 海上避碰规则.pptx VIP
- 避碰规则COLREG72-(03中英版).doc VIP
- YY 0068.1-2008 医用内窥镜 硬性内窥镜 第1部分:光学性能及测试方法.pdf
- 故事罗伯特.麦基.doc VIP
- 回肠造口还纳术护理.pptx
- YY0068.3-2008 医用内窥镜 硬性内窥镜 第3部分:标签和随附资料.pdf VIP
- 《YY/T 0068.2-2008医用内窥镜 硬性内窥镜 第2部分:机械性能及测试方法》.pdf
- 统编版八年级语文上册《文学性文本阅读》期中复习专项练习题(带答案).docx VIP
- YY 0068.2-2008医用内窥镜 硬性内窥镜 第2部分:机械性能及测试方法.pdf
- 提升课堂互动的课件设计PPT模板.pptx VIP
文档评论(0)