第二章 算法的构造和评价.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文档。上传文档
查看更多
哈工大计算机科学与技术学院 数据结构课程组 第二章 算法的构造及评价 2.1 逐步求精的算法构造过程 2.1.1 算法的定义 2.1.2 算法构造过程 实际上就是用计算机求解一个问题的过程 算法逐步求精实例 例2.1.2 交叉路口的交通安全管理问题 问题的分析 所有这些可能的“拐弯”构成一个集合. 将此集合分成组,使得每组中所有的“拐弯”都能同时进行而不发生碰撞. 每组对应一个指挥灯,保证不碰撞;用尽可能少的指挥灯归结为分成尽可能少的组. 问题归结为如何进行集合的划分? 模型化 算法的基本思路 转化为图的着色问题(着同一颜色的结点即为一组)。 常见算法为(1)穷举法(2)试探法(3)贪心法 “贪心”算法的基本思想是首先用第一种颜色对图中尽可能多的顶点着色(尽可能多表现出“贪心”),然后用第二种颜色对余下的顶点中尽可能多的顶点着色, 如此等等,直至所有的顶点都着完色。 算法原型(自然语言描述) (1)将所有的结点设置为未着色 (2)当有未着色的结点时,进行如下步骤 (3)产生一种新的颜色 (4)选取某个未着色的点,用此新颜色对其着色 (5)扫描所有未着色的顶点,对其中的每个顶点尽可能的用此新颜色着色。(依据为它是否与已着新颜色的任何顶点相邻。若不相邻,则用新颜色对它着色。)(此处体现了贪心)。 (6)重复步骤(2)-(5),直到所有的结点均以着色 第一步求精(伪代码描述) 第二步求精 求精v不与newclr中的任何顶点相邻(即对于所有的顶点,都不相邻) 第三步求精 遍历集合中的所有顶点 第四步求精 引入ADT 根据上一步求精的结果,算法中大部分操作都归结为对图和集合的操作。因此需定义ADT GRAPH和ADT SET。 设G为GRAPH的实例,则需在G上定义如下操作: (1)FIRSTG(G)返回G中的第一个未加标记的(未着色的)元素;若G中没有这样的元素存在,则返回NULL。 (2)EDGE(v,w,G)若v和w在G中相邻,则返回true,否则返回false。 (3)MARK(v,G)标记G中的元素v。 (4)ADDG(v,G)将元素v放入G中。 (5)NEXTG(G)返回G中下一个未标记的元素,若G中没有这样的元素存在,则返回NULL。 设S为SET的实例,则需在S上在定义如下操作: (1)MAKENULL(S)将集合S置空。 (2)FIRST(S)返回S中的第一个元素;若S为空集,则返回NULL。 (3)NEXT(S)返回S中的下一个元素;若S中没有下一个元素,则返回NULL。 (4)ADDS(v,S)将v放入S中 第五步求精 用引入的ADT对算法进行形式化描述 第六步求精 ADT的实现以及整个程序的连编 确定抽象数据型GRAPH及SET的数据模型如何实现。 编写相应的操作函数。 给出类型elementtype的定义和实现。 将各部分连在一起。 2.2 算法评价和复杂性分析 2.2.1 算法的评价准则 一:正确性(Correctness) 含义:指对一切合法的输入数据经有限时间或有限步后均可得到正确(满足规格说明要求)的结果。 算法的正确性证明常有两种途径: 形式化证明 先构造一组相关的引理和定理,再形式的证明语句系列确实完成了符合规定的正确动作。 对于复杂的算法,其正确性的形式证明仍是一个有待突破的课题。 验证 由于一切合法输入可能是不可穷尽的,所以通常只是构造一些有代表性的输入进行验证(这是我们通常采取的办法)。 2.2.1 算法的评价准则 二:时间复杂性(Time Complexity) 含义:对于同一问题的不同正确算法,其执行时间的多少成为又一评价准则。 计算和比较算法的执行时间常有两种方法: 实验测量法(即计算其实际执行时间或执行的指令条数) 优点:精确。 缺点:算法必须编制成可运行程序后才能进行比较;所得的结果过多的依赖于非算法本身的因素,如计算机的硬件、编译程序、编程语言、操作系统等。 数学分析法 时间复杂性的数学分析 可以进行数学分析 算法的组成具有一定的规律:由一些基本操作经过三种控制结构(顺序,分支和循环)组成。 就可以直接在程序的基础上,分析得出这些基本操作的累加次数,基于这一次数就可比较算法执行时间。 时间复杂性的定义 对于特定算法,其基本操作的累加次数只和问题的规模n有关,因此是一个关于n的函数,标记为T(n)。 由于进行数学分析,主要考虑T(n)的增长率,变化趋势及界限等,其具体数值意义不大;所以主要考虑的是基本操作的重复次数。 定义:算法中基本操作重复执行的次数是问题规模n的某个函数f(n),算法的时间复杂性定义为T(n)=O(f(n))。此处O表示T(n)至多与f(n)同阶,因此也称为渐进时间复杂度(f(n)是T(n)增长率的上界。 2.

文档评论(0)

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

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

1亿VIP精品文档

相关文档