算法-第6章-变治法(李静).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文档。上传文档
查看更多

**********************765892865792865792865729825769**算法HeapBottomUp(H[1…n]){//用自底向上算法构造一个堆 for(i=n/2;i=1;i--){ k=i; v=H[k];heap=false; while(!heap2*k=n){ j=2*k; if(jn) //存在两个孩子 if(H[j]H[j+1]) j++;//取其中较大的一个孩子 if(v=H[j])//用较大的孩子进行比较 heap=true; else{H[k]=H[j];k=j;}//将孩子的值给k节点 }H[k]=v; }}**最差情况下的算法效率:设n=2k-1,即树为满树,每一层上节点最多且高度h=k-1最坏情况下每个位于第i层的键都会移动到叶子层h中。因为移动到下一层要进行两次比较,所以位于第i层的键总共需要2(h-i)次比较:**825769108257691082576910插入操作所需的键值比较次数≤log2n,所以插入的效率属于O(logn)**从堆中删除一个元素只考虑一种最重要的情况:删除根键根键和堆最后一个键K交换堆规模减1(删除了一个元素)树的“堆化”:K沿树向下筛选,验证沿途节点是否满足堆的要求,不满足就将其与较大孩子节点交换,直到满足为止**625981625189625816251862158**堆删除的效率删除的效率取决于交换和堆的规模减1后,树的”堆化“所需的键值比较次数因为是沿树向下比较,所以它所需的键值比较次数不可能超过堆的高度的两倍。所以删除的效率≤2log2n,属于O(logn)**堆排序J.W.J.Williams发明的堆排序算法分两步走:构造堆:为一个给定的数组构造一个堆删除最大键:对剩下的堆应用n-1次根删除操作效率:构造堆:O(n)删除最大键:**霍纳法则**霍纳法则霍纳法则是一个很好的“改变表现”技术的例子**系数x=322-13×2+(-1)=533×5+3=1813×18+1=55-53×55-5=160霍纳法则**算法Horner(p[0…n],x){ //用霍纳法则求一个多项式在一个给定点的值 p=p[n]; for(i=n-1;i=0;i--) p=x*p+p[i]; returnp;} **霍纳法则霍纳法则还有一些有用的副产品:该算法在计算P(x)在某一点x0上的值时所产生的中间数字,恰好可以作为P(x)除以x-x0的商的系数,而算法的最后结果,除了等于P(x)以外,还等于这个除法的余数。这种被称为综合除法。**二进制幂运用基于“改变表现”的思想,使用指数n的二进制表示计算an:从左到右处理二进制串从右到左处理二进制串设n=bl…bi…b0是在二进制系统中,表示一个正整数n的比特串。所以可以把n通过下面多项式表示:**从左到右二进制幂用霍纳法则计算二进制多项式p(2)//当n≥1,第一个数字总是1 p=1; for(i=l-1;i=0;i--) p=2*p+bi;相对于an=ap(2) ap=a1; for(i=l-1;i=0;i--) ap=a2*p+bi**算法LRBExp(a,b(n)){//从左到右二进制幂算法计算an product=a; for(i=l-1;i=0;i--){ product×=product; if(bi==1) product×=a; } returnproduct;}**从右到左二进制幂因此可以用各项:的积来计算an**算法RLBExp(a,b(n)){//从右到左二进制幂算法计算an term=a; //初始化an if(b0==1)product=a; else product=1; for(i=1;il;i++) { term*=term; if(bi==1) product*=term; } return product;}

文档评论(0)

177****7891 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档