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

算法-分治法优质文档课件.pptVIP

  1. 1、本文档共56页,可阅读全部内容。
  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文档。上传文档
查看更多

2分递归函数的运行轨迹在递归函数中,调用函数和被调用函数是同一个函数,需要注意的是递归函数的调用层次,如果把调用递归函数的主函数称为第0层,进入函数后,首次递归调用自身称为第1层调用;从第i层递归调用自身称为第i+1层。反之,退出第i+1层调用应该返回第i层。采用图示方法描述递归函数的运行轨迹,从中可较直观地了解到各调用层次及其执行情况。*/562分Hanio(3,A,B,C)Hanio(2,A,C,B)Hanio(1,A,B,C)Move(A,C)Move(A,B)Hanio(1,C,A,B)Hanio(1,A,B,C)Hanio(2,A,C,B)Move(C,B)Hanio(1,C,A,B)Move(A,C)Hanio(2,B,A,C)Hanio(1,B,C,A)Move(B,C)Hanio(1,A,B,C)Hanio(1,B,C,A)Move(A,C)Hanio(2,B,A,C)Move(B,A)Hanio(1,A,B,C)结束*2分递归函数的内部执行过程一个递归函数的调用过程类似于多个函数的嵌套调用,只不过调用函数和被调用函数是同一个函数。为了保证递归函数的正确执行,系统需设立一个工作栈。*2分递归算法结构清晰,可读性强,而且容易用数学归纳法来证明算法的正确性,因此,它为设计算法和调试程序带来很大方便,是算法设计中的一种强有力的工具。递归算法是一种自身调用自身的算法,随着递归深度的增加,工作栈所需要的空间增大,递归调用时的辅助操作增多,因此,递归算法的运行效率较低。递归算法的特点*2分算法4.6——快速排序voidQuickSort(intr[],intfirst,intend){if(firstend){pivot=Partition(r,first,end);//问题分解,pivot是轴值在序列中的位置QuickSort(r,first,pivot-1);//递归地对左侧子序列进行快速排序QuickSort(r,pivot+1,end);//递归地对右侧子序列进行快速排序}}*2分T(n)=2T(n/2)+n=2(2T(n/4)+n/2)+n=4T(n/4)+2n=4(2T(n/8)+n/4)+2n=8T(n/8)+3n………=nT(1)+nlog2n=O(nlog2n)因此,时间复杂度为O(nlog2n)。最好情况:每次划分后把待划分区间划分为长度相等的两个子序列。在具有n个记录的序列中,一次划分需要对整个待划分序列扫描一遍,则所需时间为O(n)。设T(n)是对n个记录的序列进行排序的时间,则有:*2分因此,时间复杂度为O(n2)。最坏情况:待排序记录序列正序或逆序。此时,必须经过n-1次递归调用,而且第i趟划分需要经过n-i次关键码的比较,因此,总的比较次数为:*2分平均情况:设基准记录的关键码第k小(1≤k≤n),则有:这是快速排序的平均时间性能,可以用归纳法证明,其数量级也为O(nlog2n)。快速排序的空间复杂性如何?*/562分4.3组合问题中的分治法4.3.1最大子段和问题4.3.2棋盘覆盖问题补充:循环赛日程安排问题*/562分给定由n个整数组成的序列(a1,a2,…,an),最大子段和问题要求该序列形如的最大值(1≤i≤j≤n)。当序列中所有整数均为负整数时,其最大子段和为0。如,序列(-20,11,-4,13,-5,-2)的最大子段和为:4.3.1最大子段和问题*/562分最大子段和问题的分治策略是:(1)划分:按照平衡子问题的原则,将序列(a1,a2,…,an)划分成长度相同的两个子序列(a1,…,a)和(a+1,…,an),则:先考虑最大子段和问题的简单算法*/562分①a1,…,an的最大子段和=a1,…,a的最大子段和;②a1,…,an的最大子段和=a+1,…,an的最大子段和;③a1,…,an的最大子段和=,且

文档评论(0)

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

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

1亿VIP精品文档

相关文档