第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文档。上传文档
查看更多
第1章 算法设计与分析 概述

算法设计与分析 主讲教师:于杨 办公室:软件507 考核形式:考查,期末占总评50%。 平时成绩:占总评的50%。出勤20%、实验30%。 第1章 概述   算法是求解问题的一系列计算步骤,用来将输入数据转换成输出结果 : 算法 输入 输出   如果一个算法对其每一个输入实例,都能输出正确的结果并停止,则称它是正确的。 1.1.1 什么是算法 算法设计应满足以下几条目标: 正确性 可使用性 可读性 健壮性 高效率与低存储量需求   【例1.1】以下算法用于在带头结点的单链表h中查找第一个值为x的结点,找到后返回其逻辑序号(从1计起),否则返回0。分析该算法存在的问题。 int findx(LNode *h;int x) { LNode *p=h-next;   int i=0;   while (p-data!=x)   { i++; p=p-next;   }   return i; }   解:当单链表中首结点值为x时,该算法返回0,此时应该返回逻辑序号1。另外当单链表中不存在值为x的结点时,该算法执行出错,因为p为NULL时仍执行p=p-next。所以该算法不满足正确性和健壮性。应改为: int findx(LNode *h;int x) { LNode *p=h-next; //p初始时指向首结点   int i=1;   while (p!=NULL p-data!=x)   { i++; p=p-next;   }   if (p==NULL) //没找到值为x的结点返回0 return 0;   else //找到值为x的结点返回其逻辑序号i return i; } 算法具有以下5个重要特征: 有限性 确定性 可行性 输入性 输出性 【例1.2】有下列两段描述: 描述1: 描述2: void exam1() { int n;   n=2;   while (n%2==0)    n=n+2;   printf(%d\n,n); } void exam2() { int x,y;   y=0;   x=5/y;   printf(%d,%d\n,x,y); }   这两段描述均不能满足算法的特征,试问它们违反了算法的哪些特征?   解:(1)是一个死循环,违反了算法的有限性特征。(2)出现除零错误,违反了算法的可行性特征。 1.1.2 算法描述   以设计求1+2+…+n值的算法为例说明C/C++语言描述算法的一般形式,该算法如下图所示。   通常用函数的返回值表示算法能否正确执行。   有时当算法只有一个返回值或者返回值可以区分算法是否正确执行时,用函数返回来表示算法的执行结果,另外还可以带有形参表示算法的输入输出。   在C语言中调用函数时只有从实参到形参的单向值传递,执行函数时若改变了形参而对应的实参不会同步改变。 例如,设计以下主函数调用上面的fun函数: void main() { int a=10,b=0;   if (fun(a,b)) printf(%d\n,b);   else printf(参数错误\n); }   执行时发现输出结果为0,因为b对应的形参为s,fun执行后s=55,但s并没有回传给b。   在C语言中可以用传指针方式来实现形参的回传,但增加了函数的复杂性。   为此C++语言中增加了引用型参数的概念,引用型参数名前需加上,表示这样的形参在执行后会将结果回传给对应的实参。上例采用C++语言描述算法如下图所示。   当将形参s改为引用类型的参数后,执行时main函数的输出结果就正确了即输出55。 算法中引用型参数的作用如下图所示。   结论:在设计算法时,如果某个形参需要将执行结果回传给实参,需要将该形参设计为引用型参数。 1.1.3 算法和数据结构 算法与数据结构既有联系又有区别。 联系:数据结构是算法设计的基础。算法的操作对象是数据结构,在设计算法时,通常要构建适合这种算法的数据结构。数据结构设计主要是选择数据的存储方式,如确定求解问题中的数据采用数组存储还是采用链表存储等。算法设计就是在选定的存储结构上设计一个满足要求的好算法。 区别:数据结构关注的是数据的逻辑结构、存储结构以及基本操作,而算法更多的是关注如何在数据结构的基础上解决实际问题。算法是编程思想,数据结构则是这些思想的逻辑基础。 1.1.4 算法设计的基本步骤   算法分析是分析算法占用计算机资源的情况。   所以算法分析的两个主要方面是分析算法的时间复杂度和空间复杂度。 1.2.1 算法时间复杂度分析 1. 时间复杂度分析概述   一个算法是由控制结构(顺序、分支和循环3种)和原操作(指固有数据类型

文档评论(0)

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

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

1亿VIP精品文档

相关文档