一、概述
一、问题求解的计算之道
基于有穷观点的能行方法:
-
- 由有限数量的明确有限指令构成
- 指令执行在有限步骤后终止
- 指令每次执行都总能得到唯一结果
- 原则上可以由人单独采用纸笔完成,而不依靠其它辅助
- 每条指令可以机械地被精确执行,而不需要智慧和灵感
关于计算的数学模型:
- 哥德尔和克莱尼的递归函数模型
- 丘奇的Lambda演算模型
- 波斯特的Post机模型
- 图灵的图灵机模型
注:
- 研究证明,上述几个“基于有穷观点的能行方法”的计算模型,全都是等价的
- 虽然希尔伯特的计划最终被证明无法实现(不存在“能行方法”可判定所有数学命题的真假),但“能行可计算”概念成为计算理论的基础
二、图灵机计算模型
图灵机(Turing Machine)的基本概念:
- 基本思想是用机器模拟人们用纸笔进行数学运算的过程,但比数值计算更为简单
- 在纸上写上或擦除某个符号
- 把注意力从纸的一个位置转向另一个位置
- 在每个阶段,要决定下一步动作依赖于此人当前所关注的纸上某个位置的符号和此人当前的思维状态
图灵机的基本定义:
图灵机由以下几部分构成:
- 一条无限长的分格纸带,每格可以记录一个符号
- 一个读写头,可在纸带上左右移动,能读出和擦写格子的字符
- 一个状态寄存器,记录有限状态中的1个状态
- 一系列有限的控制规则:某个状态,读入某个字符时:要改写成什么字符,要如何移动读写头,要改变为什么状态
一个图灵机实例:
三、算法和计算复杂性
问题的分类:
- What: 是什么?面向判断与分类的问题,可以通过树状判定分支解决
- Why:为什么?面向求因与证明的问题,可以通过有限的公式序列来解决
- How: 怎么做? 面向过程与构建的问题,可以通过算法流程来解决。解决问题的过程,即对算法和相应数据结构的研究,就是本课程要解决的问题!
计算复杂性:
- 由于资源(时间和空间)相当有限,对于问题的解决需要考虑其可行性如何
- 定义一些衡量指标,对问题的难易程度(所需的执行步骤数/存储空间大小)进行分类,是计算复杂性理论的研究范畴
- 计算复杂性理论研究问题的本质,将各种问题按照其难易程度分类,研究各类问题的难度级别,并不关心解决问题的具体方案
- 算法是研究问题在不同现实资源约束情况下(硬件配置、运行环境、应用领域、使用状况)的不同解决方案,致力于找到效率最高的方案
- 存在不可计算问题,有不少定义清晰,但无法解决的问题,如停机问题、不可计算数等
四、突破计算极限
- 超大规模分布式计算
- 新型计算技术:光子计算、DNA计算、量子计算
- 分布式智慧——众包
五、抽象和实现
计算机科学主要研究的是问题、问题解决过程,以及问题的解决方案,包括了计算复杂性理论以及对算法的研究
抽象:
- 为了更好地处理机器相关性或独立性,引入了“抽象”的概念
- 从逻辑(logical)或物理(physical)的不同层次上看待问题及解决方案
- 例如,计算机对大众来说可以用来编辑文档、收发邮件等等,而并不需要具备计算机内部如何处理的知识,利用这些功能是计算机的“逻辑”层次;而对于计算机科学家等来说,就必须要了解从硬件结构、操作系统原理到网络协议等各方面的低层次细节,内部如何实现,是计算机的“物理”层次。
编程:
- 编程是通过一种程序设计语言,将抽象的算法实现为计算机可以执行的代码的过程
- 算法 + 数据结构 = 程序
程序设计语言实现算法的基本机制:
- 程序设计语言需要为算法的实现提供实现“过程”和“数据”的机制,具体表现为“控制结构”和“数据类型”
- 程序设计语言均有语句对应控制结构:顺序处理、分支选择、循环迭代
- 程序设计语言也提供最基本的数据类型来表示数据,如证书、字符等
六、为什么研究数据结构与算法