数据结构教学课件ppt作者主编马世霞第1章绪论课件.pptVIP

数据结构教学课件ppt作者主编马世霞第1章绪论课件.ppt

  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文档。上传文档
查看更多
数据结构教学课件ppt作者主编马世霞第1章绪论课件.ppt

要设计一个好的算法通常要考虑以下的要求。 (1)正确性。算法的执行结果应当满足预先规定的功能和性能要求。 “正确性”的含义是所设计的程序没有语法错误,对于刁难性的数据也能够得到满足要求的输出结果。 (2)可读性。一个算法应当思路清晰、层次分明、简单明了、易读易懂。 好的算法首先是便于交流,其次才是机器可执行,可主读性好的算法有助于编程人员对算法的理解,而难懂的算法对于隐藏的错误不易调试和修改。 (3)健壮性(鲁棒性)。当输入不合法数据时,应能作适当处理,不至引起严重后果,陷入死机。 (4)高效率和低存储量。有效使用存储空间和有较高的时间效率。对于一个问题的解决通常有多个算法,对于执行时间短的算法其效率就高。存储量需求是算法在执行过程中所需要的最大存储空间,这两者都与问题的规模有关。 【例1-5】求n个数的最大值。 main() { int max=0,x; for(int i=1;i=n;i++) { scanf(“%d”,x); if(xmax) max=x; } printf(“%d”,max); } 提示:本程序无语法错误,当输入全为正数时,结果正确;当输入全为负数时,求得的最大值为0,结果不正确。既要输入正确的数据,也要输入错误的数据进行健壮性测试。 1.4.2 算法描述 1.4.2.1数据结构中算法、描述语言、程序的关系 (1)算法:描述了数据对象的元素之间的关系(包括数据逻辑关系、存贮关系描述)。可以使用各种不同的方法来描述。 (2)描述算法的工具:自然语言、框图或高级程序设计语言等。 自然语言简单但易于产生二义。用自然语言来描述算法的优点是简单且便于人们对算法的阅读。缺点是不够严谨。 框图直观但不擅长表达数据组织结构,可以使用程序流程图、N-S图等算法描述工具。其特点是描述过程简洁、明了。 高级程序语言较为准确但又比较严谨。 (3)程序是算法在计算机中的实现(与所用计算机及所用语言有关):可以直接使用某种程序设计语言来描述算法,不过直接使用程序设计语言并不容易,而且不太直观,常常需要借助于注释才能使人看明白。 1.4.2.2类描述算法的语言选择 为了解决理解与执行这两者之间的矛盾,人们常常使用一种称为伪码语言的描述方法来进行算法描述。伪码语言介于高级程序设计语言和自然语言之间,它忽略高级程序设计语言中一些严格的语法规则与描述细节,因此它比程序设计语言更容易描述和被人理解,而比自然语言更接近程序设计语言。 1.4.2.3设计实现算法过程步骤 (1)找出与求解有关的数据元素之间的关系(建立结构关系)。 (2)确定在某一数据对象上所施加运算。 (3)考虑数据元素的存储表示。 (4)选择描述算法的语言。 (5)设计实现求解的算法,并用程序语言加以描述。 1.4.3 算法性能分析与度量 好的算法具备时间效率高和存储量低的特点。对同一问题,有多个算法,执行时间短的效率高,存储量是指执行过程需要的最少存储量。 (1)关于算法执行时间 一个算法的执行时间大致上等于其所有语句执行时间的总和,对于语句的执行时间是指该条语句的执行次数和执行一次所需时间的乘积。 两个算法的第一条、最后一条语句是一样的,中间部分是我们要关注的,把循环当作一个整体,忽略头尾循环判断的次数,这两个算法的差别就是1与n的区别。 (2)时间复杂度 对于算法分析,我们关心的是算法中语句总的执行次数T(n)是关于问题规模n的函数,进而分析T(n)随n的变化情况并确定T(n)的数量级(Order of Magnitude )。常用“大O表示法”表示:T(n)= O(f(n))。它表示随着问题的规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的渐近时间复杂度,简称时间复杂度。 函数的渐近增长:给定的两个函数f(n)和g(n),如果存在一个整数N,使得对于所有的nN时,总有f(n)g(n),我们称f(n)的增长渐近快于g(n)。如C算法、D算法与E算法。 当n=1,2时,C算法不如D算法。但当n2时,C算法优于D算法。随n的增加,算法C比D越来越好。于是我们可以说,当输入数据n,只要超过某一数值N时,这个函数就总是大于另一函数,我们称函数是渐近增长的。 当n2时,即N=3时,算法D与E的渐近增长是相同的。都记为O(n2)。 (3)推导大O阶的方法 1)程序运行时间中的常数用1代替。如运行3次,记为O(1), 运行100次,也记为O(1)。 2)在大O()函数中运行次数只取最高阶项,并且最高阶项的常数为1。如5n2记O(n2)。 它表示随问题规模n的增大算法的执行时间的增长率和f(n)的增长率相同,称作算法的渐进时间复杂度,简称时间复杂度。 一般情况下,随n的增大,T(n)的增长较慢的算法为最优的算法。 按大O阶推导方法: A算法f(n

文档评论(0)

带头大哥 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档