- 1、本文档共12页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
算法表达中的抽象机制.doc
算法表达中的抽象机制
傅清祥 王晓东算法与数据结构 ,电子工业出版社,1998
摘要
本文介绍了算法表达中的抽象机制,引入了抽象数据类型ADT的概念,提供一种相应的自顶向下逐步求精、模块化的程序设计方法,即运用抽象数据类型来描述程序的方法。
目录
§ 简介
§ 从机器语言到高级语言的抽象
§ 抽象数据类型
§ 使用抽象数据类型带来的好处
§ 数据结构、数据类型和抽象数据类型
简介
要用计算机解决一个稍为复杂的实际问题,大体都要经历如下的步骤。
将实际问题数学化,即把实际问题抽象为一个带有一般性的数学问题。这一步要引入一些数学概念,精确地阐述数学问题,弄清问题的已知条件、所要求的结果、以及在已知条件和所要求的结果之间存在着的隐式或显式的联系。
对于确定的数学问题,设计其求解的方法,即所谓的算法设计。这一步要建立问题的求解模型,即确定问题的数据模型并在此模型上定义一组运算,然后借助于对这组运算的调用和控制,从已知数据出发导向所要求的结果,形成算法并用自然语言来表述。这种语言还不是程序设计语言,不能被计算机所接受。
用计算机上的一种程序设计语言来表达已设计好的算法。换句话说,将非形式自然语言表达的算法转变为一种程序设计语言表达的算法。这一步叫程序设计或程序编制。
在计算机上编辑、调试和测试编制好的程序,直到输出所要求的结果。
在这里,我们只关心第3步,而且把注意力集中在算法程序表达的抽象机制上,目的是引人一个重要的概念--抽象数据类型,同时为大型程序设计提供一种相应的自顶向下逐步求精、模块化的具体方法,即运用抽象数据类型来描述程序的方法。
从机器语言到高级语言的抽象
我们知道,算法被定义为一个运算序列。这个运算序列中的所有运算定义在一类特定的数据模型上,并以解决一类特定问题为目标。这个运算序列应该具备下列四个特征。
有限性,即序列的项数有限,且每一运算项都可在有限的时间内完成;
确定性,即序列的每一项运算都有明确的定义,无二义性;
可以没有输入运算项,但一定要有输出运算项;
可行性,即对于任意给定的合法的输入都能得到相应的正确的输出。
这些特征可以用来判别一个确定的运算序列是否称得上是一个算法。
但是,我们现在的问题不是要判别一个确定的运算序列是否称得上是一个算法,而是要对一个己经称得上是算法的运算序列,回顾我们曾经如何用程序设计语言去表达它。
算法的程序表达,归根到底是算法要素的程序表达,因为一旦算法的每一项要素都用程序清楚地表达,整个算法的程序表达也就不成问题。
作为运算序列的算法,有三个要素。
作为运算序列中各种运算的运算对象和运算结果的数据;
运算序列中的各种运算;
运算序列中的控制转移。
这三种要素依序分别简称为数据、运算和控制。
由于算法层出不穷,变化万千,其中的运算所作用的对象数据和所得到的结果数据名目繁多,不胜枚举。最简单最基本的有布尔值数据、字符数据、整数和实数数据等;稍复杂的有向量、矩阵、记录等数据;更复杂的有集合、树和图,还有声音、图形、图像等数据。
同样由于算法层出不穷,变化万千,其中运算的种类五花八门、多姿多彩。最基本最初等的有赋值运算、算术运算、逻辑运算和关系运算等;稍复杂的有算术表达式和逻辑表达式等;更复杂的有函数值计算、向量运算、矩阵运算、集合运算,以及表、栈、队列、树和图上的运算等:此外,还可能有以上列举的运算的复合和嵌套。
关于控制转移,相对单纯。在串行计算中,它只有顺序、分支、循环、递归和无条件转移等几种。
我们来回顾一下,自从计算机问世以来,算法的上述三要素的程序表达,经历过一个怎样的过程。
最早的程序设计语言是机器语言,即具体的计算机上的一个指令集。当时,要在计算机上运行的所有算法都必须直接用机器语言来表达,计算机才能接受。算法的运算序列包括运算对象和运算结果都必须转换为指令序列。其中的每一条指令都以编码(指令码和地址码)的形式出现。与算法语言表达的算法,相差十万八千里。对于没受过程序设计专门训练的人来说,一份程序恰似一份天书,让人看了不知所云,可读性极差。
用机器语言表达算法的运算、数据和控制十分繁杂琐碎,因为机器语言所提供的指令太初等、原始。机器语言只接受算术运算、按位逻辑运算和数的大小比较运算等。对于稍复杂的运算,都必须一一分解,直到到达最初等的运算才能用相应的指令替代之。机器语言能直接表达的数据只有最原始的位、字节、和字三种。算法中即使是最简单的数据如布尔值、字符、整数、和实数,也必须一一地映射到位、字节和字中,还
您可能关注的文档
最近下载
- 消防工程质量监理质量评估报告.docx VIP
- JTT 1516-2024 公路工程脚手架与支架施工安全技术规程.docx VIP
- 咨询服务流程与方法.docx VIP
- 乳制品的生产企业应急预案终稿.pdf
- 北师大版七年级数学下学期期中易错精选50题(解析版)2022-2023学年七年级数学下册重难点专题提优训练(北师大版).docx VIP
- 2023-2024年暨南大学352口腔综合考研真题.pdf VIP
- 110千伏及以下配电网规划技术指导原则(2024年).doc VIP
- 药品常用知识(共18张PPT).pptx VIP
- 医疗质量管理课件.pptx VIP
- 管理学原理配套教材电子课件(完整版).pptx
文档评论(0)