- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
算法设计与分析 主讲教师:张连芳 天津大学计算机学院 主要参考书目 Sartaj Sahni: ”DataStructures,Algorithms,and Applications in C++” Sara Baase: “Computer Algorithms-Introduction to Design and Analysis” 2.1 引论 1.算法、问题和问题实例 算法古已有之-欧几里德辗转相除法 求两个自然数a和b的最大公约数 a=q1*b+r1, 0≤r1b b=q2*r1+r2 反复相除直到 rk-1=qk*rk 则rk是a和b的最大公约数. 那个时代虽然还没有现代的计算机系统, 但已经有了自然数和自然数的加减乘除这样一个计算系统 2.1引论 1.算法、问题和问题实例 算法的特征 算法能够用有穷长度的一组规则来描述, 例如有限自动机,计算机语言写的程序. 欧几里德除法可以写成以下一条规则: 以上次相除的除数作被除数余数作除数,反复进行直到余数为0. 算法必须对所求解问题的任意实例都能给出答案. 算法使用机械能执行的基本操作. 欧几里德除法具有上述算法的特征, 它使用自然数这一问题相关的计算模型. Universal 计算模型在上世纪30年代由Turing给出 2. 算法的性能- 算法运行时所需的计算时间和内存空间 为什么要研究算法的性能? 比较算法的“好坏”; 衡量所设计的算法是否“能用”? 我们使用算法的时间、空间复杂度衡量算法对时间、空间的要求. 很多问题找不到满足要求的算法-NP难度问题. 性能评价的方法 解析的方法-建立算法的运行时间和算法输入之间的函数关系 测量的方法 本课程以解析方法为主-算法分析。 欧几里德除法分析 因a≥b+r12r1 ,即, 2r1a; 所以每步除法使得余数至少是被除数的一半; 所以,至多2log2a步除法算法结束. 3.实例(instance)长度-输入量 实例长度(size):算法求解的是一个问题, 但算法运行时是对一个具体实例,实例长度指表示这一实例的输入的长度. 例如,以邻接表表示图时,其长度为(n+m)u, u为节点的字节数.为了简化分析,往往忽略u,而简单的用m+n来表示其长度,称为实例特征. 实例特征:描述问题实例长度(size)的参数.例如矩阵的阶数n是反映实例长度(n2)的参数. 实例特征的选取是约定俗成的. 算法分析建立算法的执行时间或空间与实例特征的函数关系 2.2 空间复杂度(Space Complexity) Sp(n) 算法的空间复杂度指算法运行时所需的内存空间大小和实例特征的函数关系. 算法所需空间包括: 常量和简单变量所需的空间-实例无关 复合变量(数组、链表、树和图等).复合变量所需空间常常和问题实例特征有关. 函数调用使用的;递归调用使用的栈空间常常和问题实例特征有关. 2.2(续) 将算法p的空间需求量写成两部分: S(p)=c+Sp(instance characteristics) c为常量(实例无关部分),Sp为可变部分 在使用解析方法研究算法的空间复杂度仅考虑函数Sp(instance characteristics) 在分析空间复杂度时我们忽略与实例特征无关的常数c. 例题2.2 例题2.2(续) T a[] 和T x需2 bytes 指针(假定T为整型) 形参 n 需2 bytes i 需2 bytes 以上均为实例特征无关的空间需求量 所以s(n)=0 注:上述分析是从程序调用的角度看,存放无序表的数组占用的空间记在上层程序的帐上. 例题2.3 例题2.4 例题2.5 小结 对非递归算法 分析与实例特征有关的数据结构的大小 对递归算法 还要分析递归调用的深度和实例特征的关系 2.3 时间复杂度(time complexity)T(n) 时间复杂度指程序执行时所用的时间。 在使用解析方法时程序p的时间复杂度表示为输入量的函数T。 机器独立的分析方法-解析的方法. 在解析地分析时间复杂度时,使用以下两种时间单位并计算: 操作计数(operation count):算法的基本操作 (程序)步计数(step count):分析全部程序 要点:基本操作或程序步的执行时间必须是常数。 2.3.2 操作计数 例题2.8 [Polynomial Evaluation] 例题2.8 [Polynomial Evaluation] 例题2.9 [Ranking] 例题2.9(续) 例如a=[4,3,9,3,7] 则r=[2,0,4,1,3] 又如a=[9,3,9,3,7]则r=[3,0,4,1,2] a中两个3有不同的rank值。 每个元素有不同
文档评论(0)