第1讲 算法及其复杂性概述.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文档。上传文档
查看更多
算法设计与分析 徐义春 H/chinaxuyichun 关于本课程 课程目的:计算机算法设计与分析导引 以算法设计为主,介绍算法设计的主要方法和基本思想;并简要介绍算法分析概念 不是程序设计课,也不是数学课 授课形式:上课+作业+期末考试 教材:《计算机算法分析与设计》王晓东 电子文献:山东师范大学徐连诚ppt 第1章 算法概述 本章主要知识点: 1.1 算法与程序 1.2 算法与数据结构 1.3 描述算法与算法设计 1.4 算法分析的基本原则 1.5 算法复杂性分析 1.1 算法与程序 算法:是满足下述性质的指令序列。 输入:有零个或多个外部量作为算法的输入。 输出:算法产生至少一个量作为输出。 确定性:组成算法的每条指令清晰、无歧义。 有限性:算法中每条指令的执行次数有限,执行每条指令的时间也有限。 程序: 程序是算法用某种程序设计语言的具体实现。 1.2 算法与数据结构 描述算法可以有多种方式 自然语言方式、表格方式、图示形式等 教材采用C++与自然语言相结合的方式 算法与数据结构的关系 不了解施加于数据上的算法就无法决定如何构造数据,可以说算法是数据结构的灵魂; 反之算法的结构和选择又常常在很大程度上依赖于数据结构,数据结构则是算法的基础。 算法+数据结构=程序 1.3 描述算法与算法设计 描述算法可以有多种方式,如自然语言方式、图形表格方式等。在这里,我们将采用C++语言来描述算法。 C++语言的优点是类型丰富、语句精炼,具有面向对象和面向过程的双重优点。 用C++来描述算法可使整个算法结构紧凑、可读性强。 在课程中,有时为了更好地阐明算法的思路,我们还采用C++与自然语言相结合的方式来描述算法。 算法设计方法主要有:分治策略、动态规划、贪心算法、回溯法、分支限界、概率算法等,我们将在后面的章节中陆续介绍。 1.3 描述算法与算法设计 问题求解(Problem Solving) 1.4 算法分析的基本原则 正确性 定义:在给定有效输入后,算法经过有限时间的计算并产生正确的答案,就称算法是正确的。 正确性证明的内容: 方法的正确性证明——算法思路的正确性。证明一系列与算法的工作对象有关的引理、定理以及公式。 程序的正确性证明——证明所给出的一系列指令确实做了所要求的工作。 程序正确性证明的方法: 大型程序的正确性证明——可以将它分解为小的相互独立的互不相交的模块,分别验证。 小模块程序可以使用以下方法验证:数学归纳法、软件形式方法等。 1.4 算法分析的基本原则 工作量——时间复杂性分析 计量工作量的标准: 对于给定问题,该算法所执行的基本运算的次数。 基本运算的选择:根据问题选择适当的基本运算。 1.4 算法分析的基本原则 占用空间——空间复杂性分析 两种占用: 存储程序和输入数据的空间 存储中间结果或操作单元所占用空间——额外空间 影响空间的主要因素: 存储程序的空间一般是常数(和输入规模无关) 输入数据空间为输入规模O(n) 空间复杂性考虑的是额外空间的大小 如果额外空间相对于输入规模是常数,称为原地工作的算法。 1.4 算法分析的基本原则 简单性 含义:算法简单,程序结构简单。 好处: 容易验证正确性 便于程序调试 简单的算法效率不一定高。要在保证一定效率的前提下力求得到简单的算法。 1.4 算法分析的基本原则 最优性 含义:指求解某类问题中效率最高的算法 两种最优性 最坏情况:设A是解某个问题的算法,如果在解这个问题的算法类中没有其它算法在最坏情况下的时间复杂性比A在最坏情况下的时间复杂性低,则称A是解这个问题在最坏情况下的最优算法。 平均情况:设A是解某个问题的算法,如果在解这个问题的算法类中没有其它算法在平均情况下的时间复杂性比A在平均情况下的时间复杂性低,则称A是解这个问题在平均情况下的最优算法。 寻找最优算法的途径 (以最坏情况下的最优性为例) 设计算法A,求W(n)。相当于对问题给出最坏情况下的一个上界。 寻找函数F(n),使得对任何算法都存在一个规模为n的输入并且该算法在这个输入下至少要做F(n)次基本运算。 相当于对问题给出最坏情况下所需基本运算次数的一个下界。 如果W(n)=F(n),则A是最优的。 如果W(n)F(n),A不是最优的或者F(n)的下界过低。 改进A或设计新算法A’使得W’(n)W(n)。 重新证明新下界F’(n)使得F’(n)F(n)。 重复以上两步,最终得到W’(n) = F’(n)为止。 1.4 算法分析的基本原则 例:在n个不同的数中找最大的数。 基本运算:比较 算法:Find Max 输入:数组L,项数 n 1 1 输出:L中的最大项MAX MAX←L(1); i←2; while i≤n do if MAXL(i) then MAX←L(i)

文档评论(0)

好文精选 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档