《新》算法与软件工程.docVIP

  1. 1、本文档共63页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
1 算法的设计与分析 计算机程序就是用计算机能够理解的语言(程序设计语言)表达的解决问题的步骤序列,计算机执行程序也就是按程序中规定的步骤一步一步地操作。程序设计就是用程序设计语言来描述解决问题的步骤。对稍复杂的问题,要直接写出解决问题的程序是困难的。为此,人们把程序设计任务分两步来进行:先不使用程序设计语言而使用一种较简单的表达方式设计出解决问题的步骤,这步工作称为算法设计;然后,使用程序设计语言将算法表达成程序,第二步的工作称为编程。编程要比算法设计容易得多。因此,算法设计是程序设计过程中的一个极为重要的环节。 1.1算法的概念 粗略地说,解决问题的步骤序列就是算法。利用计算机解决信息处理类型的问题需要有算法,在日常生活中做任何事情也都有它的算法。例如,烹调书中告诉人们烘烤面包的原料与操作步骤,这就是烤面包的算法;从南京开汽车去黄山的路线走法就是从南京开车去黄山的算法。在这门课程中,我们关心的是用于计算机的算法。 一般的计算机算法都具备以下五个特性:可执行性,确定性,有穷性,有输入说明和有输出信息的步骤。 1. 可执行性。意思是说,算法中的每一个步骤都是可执行的。显然,这是一个正确算法必须具备的性质。例如,若在解决某问题的步骤序列中有一步:‘将桌上的红色圆珠笔递给我’。这个步骤计算机是无法执行的,这个解决问题的步骤序列不是算法。 2. 确定性。其含义是,算法中的每一个步骤,必须是确切定义的,不得有任何歧义性(非确定性)。例如,步骤‘用10和2进行算术运算’是一个有歧义的步骤,而步骤‘计算10与2之和’是具有确定性的步骤。如果一个解题的步骤序列中有的步骤是不明确的,那么使用这样的解题步骤序列就不能保证会获得问题的准确答案。自然,这样的解题步骤序列不能称为算法。 3. 有穷性。以获得问题解答为目的的算法必须在执行有穷步之后结束。如果一个解题步骤序列永远不能结束,因而永远得不到问题的解答。 4. 有输入信息的说明。有的算法可以没有输入信息,然而大多数算法具有输入信息。对于需要输入信息的算法必须说明输入信息的类型和数量特征。输入信息是算法加工的对象,输出信息是算法输出的成品,不对加工对象提出要求,自然难以得到合格的成品。 5. 有输出信息的步骤。以获得问题解答为目的的算法必须将人们所关心的问题答案输送出来。因此,对于这样的算法应当至少有一个输出问题答案的步骤。 1.2 算法的表示 表示算法的常用工具有流程图、盒图(又称结构化流程图,N-S图)和伪码。这三种表示方法在有关计算机的教科书中均有使用。流程图和盒图都是用图形来表示算法的,这两种表示方法在本小节的最后介绍。 在本教程中采用一种类似于程序设计语言的伪码来描述算法。以后可以看到,用伪码表示的算法可以很容易地被翻译成用高级语言表示的算法即计算机程序。伪码形式没有统一的规定,可以自己定义,但定义必须合理、无二义性、不存在矛盾。本教材使用的伪码只有四种基本指令:赋值指令、循环指令、条件指令和输出指令。下面结合例子来说明这些指令的意义与用法。 1.2.1 赋值指令 在算法中经常需要使用一些数据,这些数据包括输入数据和中间结果。为了设计算法方便起见,人们使用助记符来对数据命名,即每一项数据都拥有区别于其它数据项的助记符,与助记符对应的数据称为助记符的值。 数据是存放在存储单元中,助记符与存放数据的存储单元也就有了对应关系,如图1.1所示。因此,人们常说‘把数据存放在助记符中’。 我们希望对数据命名的名字能反映该项数据的含义,因此,对数据命名的名字叫做助记符。例如,运动员的得分数据的名字可以是score,圆半径的名字可以是r,圆周长的名字可以是circle。对数据命名后,我们就以利用这些名字对数据进行运算,也可以对数据的名字赋予新的值。 赋值指令的一般形式是 助记符←表达式; 其中,表达式是助记符或是常量或是对助记符和常量进行运算的式子,目前我们暂时规定表达式中的运算仅限于四则算术运算;箭号‘←’又称为赋值号。赋值指令的语义是,计算赋值号右边的表达式的值并将这个值赋予左方的助记符,使助记符具有表达式的值。 例如,赋值指令 r←10; 语义是,将常量10赋给助记符r,r的当前值为10。需要指出,一个助记符在任何时候只有一个值,一旦它被赋予新值后,它曾经具有的老值被抹去。这是因为一个助记符在计算机中是与一个(或一组)存储单元相对应,当一个新的数据被存入这个(或这组)存储单元后,这个(或这组)存储单元中原有的数据自动消失。因此,不管r原来具有什么样的值,在执行上述赋值指令之后,r的值总是10。由于助记符与存储单元有对应关系,因此,人们常说,赋值指令将表达式的值存放在助记符中。 再如,在执行上述指令之后,接着再执行指令 circle←6.28 * r; 其中

文档评论(0)

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

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

1亿VIP精品文档

相关文档