- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
算法设计与分析Algorithm Design and Analysis 於东军 njyudj@mail.njust.edu.cn 课程内容 (32学时) 常用的算法设计策略(包括分治策略、动态规划、贪心策略、回溯法、随机算法等) 算法复杂度分析方法(计算迭代次数、使用递归方程、频度分析等) 课程要求 掌握常用的算法设计策略、算法复杂度分析方法 授课方式:讲授 考核方式:闭卷笔试 教材 《算法设计技巧与分析》,M. H. Alsuwaiyel著, 电子工业出版社,吴伟昶等译,2004 相关参考文献 Algorithm Design Techniques and Analysis, M. H. Alsuwaiyel. (影印本). 电子工业出版社. 2003 计算机算法设计与分析(第3版), 王晓东, 电子工业出版社, 2007. 算法设计与分析,王红梅编著, 清华大学出版社, 2006. 算法导论(第2版),Thomas H. Cormen等著,潘金贵等译,机械工业出版社,2006. 1 算法引论 历史背景 算法复杂度与渐近分析方法 如何估计算法的复杂度 算法复杂度分析的意义 历史背景 阶段1:二十世纪30年代,能否使用一个有效的过程来求解一个问题(相当于现在算法的概念)一直是人们所关注的。当时的焦点是将问题进行分类:可解或是不可解。关注问题是否可以求解的领域称为可计算理论(computability theory or theory of computation)。出现了一系列的计算模型,例如:calculus of Church、Post machines of Post、Turing machines of Turing、RAM model of computation。 阶段2:随着数字计算机的出现,人们越来越关注于那些可求解的问题。一开始,人们满足于能够在一定的时间内解决一个特定的问题,而不去关注所需要的资源。慢慢地,人们需要考虑在有限资源的条件下高效地解决问题。这就导致了计算复杂度(computational complexity)这一新学科的诞生。在这个领域,主要是研究解决可求解问题时所需要的资源,主要是时间和空间复杂性。有时候,其他的资源也需要考虑,例如,通信代价、需要使用的处理器的个数(使用并行计算模型)等等。 引例:搜索问题 给定已经排好序(不妨假设为非降序)的n个元素A[1…n] ,现在要判定一个给定的元素x是否在此数组中出现。 方法1:顺序搜索 方法2:二分搜索 二分搜索算法 分析 算法及其性质 算法是对问题求解过程的准确描述,由有限条指令组成,这些指令能在有限时间内执行完毕并产生确定性的输出。 算法需满足的4个性质: 输入:零个或多个外部量作为输入。 输出:至少产生一个量作为输出, 它(们)与输入量之间存在某种特定的联系。 确定性:组成算法的每条指令都是清晰、无歧义的。 有限性:每条指令的执行次数有限,执行每条指令的时间也有限。 程序与算法的区别: 程序是算法用某种程序设计语言的具体实现。 程序可以不满足算法的有限性性质。 算法的复杂度 复杂度:算法运行时需要耗费计算机资源的量,可以分为时间复杂度和空间复杂度。 算法复杂度依赖于三个方面:待求解问题的规模、算法的输入和算法本身。(如何理解) 用n,I,A分别表示问题的规模、算法的输入和算法本身,用表示C复杂度,则有:C=F(n,I,A)。如果将时间复杂度和空间复杂度分开,则有T=T(n,I,A)和S=S(n,I,A)。通常,我们让A隐藏在复杂度函数名中,所以有T=T(n,I)和S=S(n,I)。 由于时间复杂度和空间复杂度概念类似,计量方法类似,且空间复杂度分析相对简单,因此本课程主要讨论算法的时间复杂度。 T=T(n,I)的具体化 假设计算机提供k 种元运算,分别记为O1, O2,…,Ok。所谓元运算指的是这样一类运算:不管使用什么样的算法和输入数据,该运算的上阶是一个常数时间(关于阶,参见后文描述)。例如,算术运算、比较、逻辑、赋值等。 元运算Oi每执行一次需要的时间为ti。 对于给定的算法A,已经知道用到的元运算Oi 的执行次数为ei , i = 1,...,k。很显然ei是n 和I 的函数,即ei = ei(n, I)。 至此,就有: 分析 T(n,I)给出的是在问题规模为n ,输入为I 时的时间复杂度。但是我们不可能,也没必要对每种可能的输入都去求其时间复杂度。通常可以考虑3 种情形下的时间复杂度:最坏情形、最好情形以及平均情形。 使用算法的绝对运行时间来度量其时间复杂度? 一个编程实现了的算法的绝对运行时间,不仅仅和算法本身相关,还和很多其他因素密切相关:机器性能、编程语言、编译器、编程技巧等等。 在分析一个算法的运行时间
文档评论(0)