作为学科的计算科学(中)

11 附录

计算科学作为一个学科的定义

    计算机科学与工程是对描述和变换信息的算法过程 其理论、分析、设计、效率、实现和应用——的系统的研究。全部计算科学的基本问题是,什么能 ( 有效地 ) 自动进行 [ 2 3] 。本学科和算法理论、数理逻辑和存储程序式电子计算机的发明一起,形成于 40 年代初。

    计算的渊源可以深入扩展到数学和工程。数学把分析分到这一领域,而工程把设计分到这领域。本学科包括它自己的理论、实验方法和工程。这与许多其他的自然科学不同。许多其它的自然科学和运用其成果的工程学科是分开的 ( 例如化学和化学工程原理 ) 、计算机科学与工程却是不可分的,因为本学科的科学与工程形态从根本上是相互渗透的。

    计算作为数学的主要对象已有几千年了。自然现象的许多模型被用来导出方程,它的解就导致那些自然现象的预言。例如轨道的弹道计算、天气预报和流体的流动等。 解这些方程的许多方法已经给出。例如线性方程组的解法、微分方程的解法和求函数的积分。几乎在这同时,机械系统设计中所需要的计算成为工程主要关注的对象。例如计算静态物体压力的算法、计算运动物体惯量的算法和测量比我们直觉要大得多或小得多的距离的方法。

    工程和数学长期合作的一个成果一直是用于计算的机械工具。某些测量员和航海家的仪器可追溯到几千年前。 Pascal LEIBNIZ 17 世纪中叶制造了算术计算器。在 19 世纪 30 年代, Babbage 设想了一个“分析机”,可以用机械,无误地计算对数、三角函数和其他般的算术函数。他的机器虽然没有完成,却给后来的工作以启发。到 20 世纪 20 年代, Bush 制造了一台电子模拟计算机,来解一般的微分方程组。同时,出现了能做加.减、乘、除和开平方的电动计算机。后来,电子触发器成为从这些机器到无运动部件的数字计算机的桥梁。

    逻辑是数学的一个分支,研究推断合理性准则和推理的形式原理。自从欧几里得时代以来,它一直是严格的数学和科学论证的工具。从十九世纪开始,人们开始寻找通用的逻辑系统,它应该在已知的演绎系统中看不到不完全性。在完全系统中,就可以机械地确定任何给定的陈述是真还是假。 Godel 1931 年发表了他的“不完全性定理”,指出这种系统是不存在的。到 20 世纪 30 年代后期,图灵探索了通用计算机的想法,这种通用计算机能够模仿任何其他计算机器上一步一步运箅的过程。他的发现与 GODEL 的想法类似,即某些良好定义的问题不能用任何机械的过程来解决。逻辑之所以重要,不仅因为它深刻地看到了自动计算的限制,而且因为注意到了符号串,或者已经编码的数字。既可解释成数据,又可解释成程序。

    这一看法成为区别存储程序式计算机和运算机械的关键的想法。算法步骤被编码成机器表示,并存放在存储器中,以后使用时译码,并由处理器执行。机器码可以从高级符号形式 ( 程序设计语言 ) 机械地推导出来。

    这就是关于古代计算和逻辑符号运算错综复杂的历史渊源,以及近代关于电子学和信息的电子表示的线索。它们导致了计算学科的诞生。

 

我们确认了计算科学的几个分支领域:

1 . 算法和数据结构

2 . 程序设计语言

3. 体系结构

4. 数值和符号计算

5. 操作系统

6. 软件方法学和工程

7. 数据库和信息检索

8. 人工智能和机器人学

9. 人机通信

   

    每一分支领域都有科目的公用基础、本质的理论部分、有意义的抽象和重要的设计与实现问题。理论研究作为该分支领域基础的数学的发展。包括支撑理论,象图论、组合论或形式语言。抽象 ( 模型化 ) 处理潜在的实现模型。这些模型忽略一些技术细节,而保存本质特性,并提供预言未来行为的工具。设计的过程是给定问题、导出要求和技术条件、反复研制和测试样机,从而实现这个系统。设计包括实验方法。计算科学中的实验方法有好几种形式:测量程序和系统,验证假设的合理性、通过样机使抽象变为现实。

    虽然软件方法学本质上说属于设计,但它包含理论和抽象的实质性成分。因此,我们把它作一个分支领域。另一方面。并行和分布式计算渗透到所有分支领域和它们的各个层次理论、抽象和设计 ) 。它们既未作为一个分支领域,也不作为某分支领域的一个层次。以下各节提供各分支领域的三个层次的细节。理论与抽象、抽象设计的界限必然是模糊的,随各人的胃口可能会有所不同。

 

    我们的目的是通过列出学科的主要特点来提供学科的指南,但不是详尽的罗列。应该记住,这个学科指南小是一个课程计划,它只是设计一个课程所需的框架。同时应该记住,这个学科指南是一个不断变化着的有机体的瞬间抢拍镜头。它需要不断考验和定期修改。

 

算法和数据结构

本领域研究一些特定类型的问题及它们的有效的解。

基本问题包括:

对给定类型的问题,最好的算法是什么 ?

它们要求多少存储空间和时间 ?

空间与时间的折衷方案是什么 ?

存取数据最好的方法是什么 ?

最好算法的最坏情况是什么 ?

算法的运行按平均来说好到何种程度 ?

算法一般化到何种程度——即什么类型的问题可以用类似的方法处理 ?

 

1. 理论

算法和数据结构领域理论的主要原理是:

(1) 可计算性理论。它定义机器能干什么、不能干什么。

(2) 计算复杂性理论。它告诉你如何测度计算函数的时空要求,把问题的大小和解决该问题算法的最好或最坏情况的性能联系起来,

    并提供证明对问题的任何可能解的下界的方法。

(3) 算法和算法类的时间和空间界限。

(4) 难解性 (intractability) 水平。例如,确定性的多项式时间内可解的问题 (P- 问题 ) ;非确定性的多项式时问内可解的问题 (NP- 问题 )

    以及有效的并行机可解问题 (NC- 问题 )

(5) 从算法的数据流要求到机器通讯通路的并行计算、下界和影射。

(6) 在时空上比确定性算法更加有效、且以足够高的概率获得 TF 确果的概率算法。蒙特卡洛方法。

(7) 密码术。

(8) 支撑领域: 图论、递归函数、递推关系、组合论、微积分、归纳、谓词逻辑和时态逻辑 (Temporallogic)

    语义学、概率和统计等支撑领域。

 

2 . 抽象

算法和数据结构的抽象的 主要 部分是:

(1) 对重要 问题 的有效的最优的算法和对最好、最坏和一般 算法 性能的分析。

(2) 控制和数据结构对各种问题类时空要求的影响的分类。

(3) 重要的技术类型,像分治 (divide-and-conquer) 、格里地算法、动态规划、有限状态机解释器、堆栈机解释器。

(4) 并行和分布式算法,把问题分由可以在不同处理器上执行的任务的划分方法。

 

3. 设计

算法和数据结构领域的设计和实验的主要内容是:

(1) 对重要问题类的算法的选择、实现和测试。这些问题类包括搜索、排序、随机数产生和结构模式匹配。

(2) 对于许多类型的问题都可以使用的通用方法的实现和测试。如杂凑法 (hashing) 、图和树。

(3) 分布式算法的实现和测试。例如网络协议、分布式数据更新、信号 (semaphores) 、死锁检测器和同步方法。

(4) 存储管理的实现与测试。例如无用单元收集、伙伴系统 (buddy system) 、表 (lists) 、表格 (tables) 和分页。

(5) 对组合问题启发式算法的大量实验测试。

(6) 能够安全可靠和秘密通信的密码协议。

 

二、程序设计语言

本领域研究执行算法的虚拟机的符号表达、算法和数据的符号表达以及从高级语言到机器码的有效的翻译。

基本问题包括:

由一种语言给出的虚拟机的可能的组织 ( 数据类型、运算、控制结构、引入新类型和运算的机制 ) 是什么 ?

这些抽象怎样在计算机上实现 ?

用什么样的符号表达 ( 语法 ) 可以有效地指明计算机应该做什么 ?

1. 理论

程序设计语言领域的理论的主要部分是:

(1) 形式语言和自动机,包括语法分析和语言翻译的理论。

(2) 图灵机 ( 过程性语言的基础 )

(3) 形式语义:定义计算机数学建模及模型、语法和实现之间关系的方法。主要的方法包括标志的、代数的、操作的和公理的语义。

(4) 支撑领域:谓词逻辑、时态逻辑、近世代数和数学归纳。

 

2 .抽象

程序设计语言领域的抽象的主要部分包括:

(1] 基于语法和动态语义模型的语言的分类:即静态型、动态型、功能的、过程性的、面向对象的、逻辑的,说明性的、报文传递和数据流。

(2) 语言按应用领域的分类:即商业数据处理、模拟、表处理和图形。

(3) 程序结构的主要语法和语义模型的分类:即过程分级、功能合成、抽象数据类型和通信的并行过程。

(4) 每种语言的主要类型的抽象实现模型。

(5) 语法分析、编译、解释和开标码优化的方法。

(6) 语法分析器、扫描器、编译器部件和编译器自动产生的方法。

 

3. 设计

程序设计语言倾向的设计与实验的主要内容是:

(1) 和特定抽象机器 ( 语义 ) 和语法一起,能形成统一的一可实现的整体的特定语言。

     例如,过程性的 (COBOL FORTRAN ALGOL Pascal Ada C) 、功能的 (Lisp) ,数据流 (SISAL VAL)

              面向对象的 (Smalltalk CLU) ,逻辑 (Prolog) ,串处理 (Snobol)

              和并行性 (CSP Occam Concurrent Pascal Modula2)

(2) 特定类型语言的指定的实现方法:运行时间模型,静态和动态执行方法、打印检查、存储和寄存器分配、编译器、交叉 编译 器和解释器、

    在程序中寻找并行性的系统。

(3) 程序设计环境。

(4) 语法分析器和扫描器的产生器 ( 例如 YAcc LEx) 、编译器产生器。

(5) 语法和语义错误检查程序、剖面 (profing) 、查错和跟踪。

(6) 程序设计语言方法对文件处理功能的应用,如制表、图、化学公式、展开片、方程式、输入和输出以及数据开关。其他应用,如统计处理。

 

三、体系结构

本领域研究将硬件 ( 和相应软件 ) 组织成有效和可靠系统的方法。

基本问题包括:

在一个机器中实现处理器、存贮和通讯的好方法是什么 ?

我们如何设计和控制大的计算系统并且有说服力地表明,它们能够在有错误和故障的情况完成预期的 工作 ?

什么类型的体系结构能使许多处理单元有效地协同工作,实现一个计算的并行 ?

我们怎样测度计算机的性能 ?

1. 理论

体系结构领域的理论主要部分是:

(1) 布尔代数

(2) 开关理论

(3) 编码理论

(4) 有限状态机理论

(5) 统计、概率、排队论、可靠性理论、离散数学、数论和不同数制下的算术等支撑领域。

 

2 . 抽象

体系结构领域的抽象主要部分是:

(1) 把功能和行为联系起来的电路的有限状态机和布尔模型。

(2) 由基本元件综合出系统的其它一般的方法。

(3) 在有限域上计算算术函数的电路和有限状态机的模型。

(4) 数据通路和控制结构的模型。

(5) 对各种模型和工作负荷情况下指令系统的优化。

(6) 硬件可靠性:冗余,差错检测,恢复和测试。

(7) VLSI 装置设计中空间、时间和组织的折衷。

(8) 各种计算模型的机器的组织:时序的、数据流、表处理、阵列处理、向量处理和报文传送。

(9) 分级设计的确定:即系统构成级、程序级、指令系统级、寄存器级和门级。

 

3. 设计

体系结构领域的设计与实验的主要内容是:

(1) 快速计算的硬件单元。例如算术函数单元、高速缓冲存储器。

(2) 所谓冯诺依曼 机器 ( 单指令序列存贮程序式计算机 ) :简单指令系统计算机 (R ISC ) 和复杂指令系统计箅机 (CISC) 实现。

(3) 存储和记录信息、检测和改正差错的有效方法。

(4) 对差错的特殊处理途径:恢复、诊断、重构和后备过程。

(5) VISI 电路设计的计算机辅助设计 (CAD) 系统和逻辑模拟、版图生成程序、故障诊断、硬编译器。

(6) 各种计算模型的机器实现;如数据流、树形、 LISP 、超立方 (hypercube) 、向量和多微处理机。

(7) 超级计算机,如 Cray Cyber 机。

 

四、数值和符号计算

本领域研究有效和精确地求解由系统的数学模型导出的方程的一般方法。

基本问题包括:

我们怎么才能用有穷离散过程去精确地逼近连续或无穷的过程 ?

我们怎么处理逼近导致的误差 ?

怎样才能按照给定精度很快地解出给定类型的方程 ?

怎样对方程进行符号运算,例如积分、微分和化简为最小项等 ?

怎样 把这些问题的回答加入到有效的、可靠的、高质量的数学软件包中去 ?

1. 理论

数值和符号计算领域的 理论 的主要部分是:

(1) 数论

(2) 线性代

(3) 数值分析

(4) 非线性力学

(5) 微积分、实分析、复分析和代数等支持领域。

 

2 . 抽象

数值和符号计算领域抽象的主要部分是:

(1) 把物理问题形式化为连续的 ( 有时离散的 ) 数学模型。

(2) 连续问题的离散逼近。线性和非线性系统解的向后误差分析、误差传播和稳定性。特殊情况下的特殊方法,例如快速傅里叶变换和泊松解答器。

(3) 可由正规网孔和边界值给定的大类问题的有限元模型,相应的迭代方法和收敛理论:直接、隐含、多栅格、收敛率。并行解法。

     数值积分时自动格栅精炼。

(4) 符号积分和微分

 

3 . 设计

数值和符号计算领域设计和实验的主要内容是:

(1) 高级问题形式化系统,如 CHEM WEB

(2) 为线性代数、常微分方程、统计、非线性方程和优化而特殊设计的程序库和程序包,例如 LINPACKK EISPACK ElLPACK

(3) 将有限元算法映射到特定结构的方法 例如,这些特定结构可能是超立方体上的多栅格。

(4) 符号运算,例如 MACSYMA REDUCE ,能进行有力的非显然的运算,特别是微分、积分和表达式到最小项的简化。

 

五、操作系统

本领域研究允许多种资源在程序执行中有效配合的控制机制。

基本问题包括:

在计算机系统运行的各级上可见对象和允许的操作是什么 ?

对每一类资源 ( 某一级上的可见对象 ) ,允许它们有效使用的最小操作集是什么 ?

怎样组织接口,使得用户只处理资源的抽象形式,而可以不管硬件的实际细节 ?

对作业调度、存储器管理、通信、软件资源存取、并发任务间的通信、可靠性和安全的有效控制策略是什么 ?

系统应该在功能上可以扩展,只要反复应用步量的构造规则就可以了。那么,这种扩展应遵循的原则是什么 ?

怎样组织分布式计算,使得许多由通信网络连结起来的自治的机器能够参与同一计算,而详细的网络协议、

主机位置、带宽和资源名称 , 人都是不可视的 ?

1 . 理论

操作系统领域理论的主要部分是:

(1) 并发性理论:同步、确定性和死锁。

(2) 调度理论,特别是处理器调度。

(3) 程序行为和存储器管理的理论,包括存储分配的最优策略。

(4) 性能模型化与分析。

(5) 存储器包装、概率论、排队论、排队网络、通信和信息论、时态逻辑和密码学等支持领域。

 

2. 抽象

操作系统领域抽象的主要部分是:

(1) 允许用户不考虑实际细节对同一类型资源进行操作的抽象原理

     ( 例如,面向进程而不是处理器,虚拟存储器而不是主从分级,文件而不是磁盘 )

(2) 用户接口可以察觉的对象到内部计算结构的束缚 (binding)

(3) 重要子问题的模型,这些子问题的例子有进程管理、存储器管理、作业调度、二级存储管理和性能分析。

(4) 分布式计箅的模型。例如顾客和服务器、合作时序进程、消息传送和远程过程调用。

(5) 安全计算模型。例如存取控制、鉴别 (Authentication) 和通信。

(6) 网络。包括分层协议、命名、远程资源使用、帮助服务和局部网络协议,如记号传送、分时总线。

 

3 . 设计

操作系统领域的设计与实验的主要内容是:

(1) 分时系统、自动存储分配器、多级调度器、存储管理器、分级文件系统、及其他作为商业性系统基础的系统部件等的样机。

(2) 建造操作系统的技术,这些操作系统的例子是 UNIX Multics Mach VMS ,和 MS-DOS

(3) 建造实用程序库的技术,这些实用程序包括编辑器,文件形成器、编译器、连接器和设备驱动器。

(4) 文件和文件系统。

(5) 排队网络模型和实际系统性能评估的模拟程序包。

(6) 网络结构,如以太网、 FDDI 、令牌环网、 SNA DECNET

(7) 包含在国防部协议集 (TCP IP) 中的协议技术、虚拟电路协议、交互式网络 (internet) 、实时会议和 X.25

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值