清华大学算法课13.ppt

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

算法与数据结构 Algorithms and Data Structures 第十三章 算法分析与设计技术 Algorithm Analysis and Design Techniques 13.1 递归算法的分析 13.2 递归式求解 13.3 大递归式的一般解 13.4 分而治之法 13.5 动态规划法 13.6 贪心法 13.7 搜索算法 13.1 递归算法的分析 考虑一个归并排序算法: List mergesort(List L,int n) { if (n==1) return L; break L into 2 halves, L1 and L2, each of length n/2; return merge(mergesort(l1,n/2), mergesort(l2,n/2)); } // 设 T(n)是最坏情况下的时间复杂度。 显然: T(n)=1 if n=1; T(n)=2T(n/2)+cn if n1 我们前面已做过很多递归算法的分析,给出了相应的递归式; 例如: Hanoi塔: T(0)=0 T(n)=2T(n-1)+1 折半查找: T(0)=0; T(1)=1; T(n)=T(n/2)+1; 最复杂的是快速排序。 13.2 递归式求解 有三种方法: (1). 猜一个解f(n),代入递归式,对n归纳证明T(n)=f(n),同时确定F(n)中的不定系数,使对所有的n有T(n)=f(n)。 (2). 展开递归式,直到式子的右边的T(m)均为初试递归式(如T(0), T(1)). (3). 一般求法。 1 猜解: T(n)=1 if n=1; T(n)=2T(n/2)+cn if n1 设T(n)=a.n.logn+b 归纳基础:当 n=1时 b=1 设对所有的kn 有 a.k.logk+b=T(k) 当k=n时: T(n)=2T(n/2)+cn 2. 展开递归式 13.3 大递归式的一般解 考虑递归算法: T(1)=1 把大小为n的问题,分解为a个大小为n/b的子问题, 划分问题和合并子问题的解所做工作量是d(n). 则: T(1)=1 T(n)=aT(n/b)+d(n) d(n)成为驱动函数 对上一个递归式, a=b=2, d(n)=cn 展开递归式: 考虑3种情况下的特解: 若: ad(b) 2. 若: ad(b), 3 若: a=d(b), 例1: T(1)=1 T(n)=4T(n/2)+n T(n)=4T(n/2)+n2 T(n)=4T(n/4)+n3 由于三个式中:a=4, b=2 ,它们的通解都是n2; d(n)=n, 所以d(b)=2, 因a=4d(b) (2) d(n)= n2, 所以d(b)=4, 因a=4=d(b) (3) T(n)=4T(n/4)+n3 d(n)= n3, 所以d(b)=8, 因a=4d(b) 特解是: O(d(n))= n3 以上讨论的是d(n)是n的积的形式,下面考虑非积形式。 例2: T(1)=1 T(n)=3T(n/2)+2n1.5 2n1.5不是n的积的形式,但n1.5是,令U(n)=T(n)/2 U(1)=1/2 U(n)=3U(n/2)+n1.5 如果U(1)=1, 则通解是:nlog3= n1.59 因U(1)=1/2,所以通解是: n1.59 /2 a=3, b=2, d(n)= n1.5 ,d(b)= 21.5=2.82 , ad(b) 所以特解是: n1.59 所以 T(n)=O(n1.59) 例3: T(1)=1 T(n)=2T(n/2)+nlogn 显然通解是 n。 a=b=2, d(n)=nlogn 不是n的积。 特解: 13.4 分而治之法 分而治之就是将大的问题分解小的子问题分别解决,最常用的办法是递归算法。在前面我们已设计了许多递归算法,诸如:Hanoi塔,快速排序,归并排序,二叉树遍历,dfs,等等。 下面在看几个例子,它们比较特殊 例4:两个n位正整数相乘,这两个数很大,大到计算机内部无法表示。 为简化问题,设n是2的幂。 XY=AC10n+(AD+BC)10n/2+BD 算法分析:位乘次数 T(1)=1 T(n)=4T(n/2)+cn T(n)=O(n2) 改进: XY=AC10n+[

文档评论(0)

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

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

1亿VIP精品文档

相关文档