Skip to content

一、概述

数据时代

问题求解的计算之道

20世纪20年代,为了解决数学本身的可检验性问题,数学家希尔伯特提出——能否找到一种基于有穷观点的能行方法,来判断任何一个数学命题的真假。

20世纪30年代,几位逻辑学家格子提出了几个关于“计算”的数学模型。

  • 哥德尔和克莱尼的递归函数

  • 丘奇的 Lambda 演算模型

  • 波斯特的 Post 机模型

  • 图灵的图灵机模型

研究证明,这几个“基于有穷观点的能行方法”的计算模型,全都是等价的。

希尔伯特的计划最终被证明无法实现——不存在“能行方法”可判定所有数学命题的真假,总有数学命题,其真假是无法证明的。 但是——“能行可计算”概念成为计算理论的基础。其中一些数学模型(如图灵机)也成为现代计算机的理论基础。

图灵机计算模型

  • 图灵机模拟器软件 Visual Turing

算法和计算复杂性

问题的分类

  • What: 面向判断与分类的问题 —— 通过树状的判定分支解决;
  • Why:面向求因与证明的问题 —— 通过有限的公式序列解决,如数学定理的证明;
  • How:面向过程与构建的问题 —— 通过算法流程解决:即算法和相应数据结构的研究。

计算复杂性

计算复杂性理论研究问题的本质,将各种问题按照其难易程度分类,研究各类问题的难度级别(如容易解决、解决程度尚可接受、解法没什么可行性等),并不关心解决问题的具体方案。

算法

算法研究问题在不同现实资源约束情况下的不同解决方案,致力于找到效率更高的方案。

突破计算极限

超大规模分布式计算 - SETI@home:利用全球联网计算机共同搜寻地外文明的科学实验计划 - BONIC 平台

新型计算技术 - 光子计算 - DNA 计算 - 量子计算

分布式智慧 - Foldit:游戏化众包蛋白质结构分析 —— 相比分布式计算的闲置计算力,革命性地利用了空闲智力。 - Eyewire、phylo DNA puzzles 等

什么是抽象和实现

计算机科学主要研究的是问题、问题解决过程、以及问题的解决方案

抽象(Abstraction)

  • 为了更好地处理及其相关性或独立性,引入了“抽象”的概念。
  • 用以从”逻辑 Logical“ 或 ”物理 Physical“ 的不同层次上看待问题或解决方案。

  • 一般大众视角上,计算机可以用来编辑文档、收发文件、聊天娱乐等;

  • 对于计算机科学家、程序员、系统管理员等来说,必须了解从硬件结构、操作系统原理、网络协议等各方面低层次细节,

利用既有功能只是计算机的“逻辑”层次。其内部如何实现,是计算机的“物理”层次。

抽象发生在各个不同层次上

抽象与实现:编程

图灵奖获得者 Niklaus Wirth 的著名公式,Pascal语言设计者。

Attention

算法+数据结构=程序

程序设计语言,需要未算法的实现提供实现过程和数据的机制,具体表现为控制结构数据类型

  • 控制结构:顺序、分支选择、循环迭代
  • 数据类型:基本的有整数、字符等,但对于复杂问题,直接利用这些基本类型,不利于算法表达。

为什么研究数据结构与算法?

数据抽象:ADT抽象数据类型

  • 过程抽象,启发我们进行数据抽象
  • ADT(Abstract Data Type)相对于程序设计语言中的基本数据类型,ADT是对数据进行处理的一种逻辑描述,并不涉及如何实现这些处理。

  • 抽象数据类型ADT,建立了一种对数据的封装,即 Encapsulation。

  • 封装技术将可能的处理实现细节,隐蔽起来,能有效控制算法的复杂度。

数据结构是对 ADT 的具体实现

  • 同一个 ADT,可以采用不同的数据结构来实现
  • 采用程序设计语言的控制结构基本数据类型来实现 ADT 所提供的逻辑接口

这种实现,属于 ADT 的物理层次。

ADT 实现:数据结构 DS(Data Structure)

  • 对数据实现逻辑层次和物理层次的分离,可以定义复杂的数据模型,来解决问题,而不需要立即考虑此模型如何实现。

接口的两端:抽象与实现

类似于 电动车 vs 汽油车

底层动力、能源不同

但是开车的操作接口(方向盘、油门、刹车、档位等)基本相同

由于对抽象数据类型可以有多种实现方案,且独立于实现的数据模型,则可以通过层层抽象,降低问题解决过程的复杂度。

  • 底层开发程序员,专注于实现和优化数据处理,而不改变数据的使用接口。
  • 用户专注于用数据接口来进行问题的解决,而无需考虑如何具体实现这些接口。

为什么要研究和学习算法?

  1. 面对未知问题,有助于根据类比方法,找到相似的解决方案。
  2. 各种算法的差异通常比较大,可以通过算法分析技术,来评判算法本身的特性。
  3. 对于棘手问题,判断是否存在相应算法,或者是有算法,但是需要耗费大量资源。
  4. 某些问题的解决,需要一些折衷的处理方式。

拓展阅读

  • 《未来简史》
  • 《超时空接触 Contact 1997
  • 《模仿游戏 The Imitation Game 2014》