图灵机是─种抽象的机器,一种抽象的计算模型。由数学家阿兰·图灵提出来的,尽管这个机器很简单,但它可以模拟计算机的任何算法,无论这个算法有多复杂。 当今的计算机都是图灵机的实现,要想知道程序执行的原理,我们可以先从「图灵机」的工作原理说起,图灵的基本思想是用机器来模拟人们用纸笔进行数学运算的过程,而且还定义了计算机由哪些部分组成,程序又是如何执行的。下面是一个图灵机的简单示意图。 假设有一个无穷的纸带,纸带就像一个存储器一样。
图灵机
图灵机的基本组成如下:
有一条「纸带」,纸带由一个个连续的格子组成,每个格子可以写入字符,纸带就好比内存,而纸带上的格子的字符就好比内存中的数据或者程序;有一个「读写头」,读写头可以读取纸带上任意格子的字符,也可以把字符写入到纸带的格子;在每个时刻,读头都要从当前纸带上读入一个方格信息,根据程序输出信息到纸带方格上,并转换自己的内部状态,然后进行移动。读写头上有少量部件,比方存储单元、控制单元以及运算单元,这其中关键元素:存储(纸带),状态,程序表
- 1、存储单元用于存放数据;
- 2、控制单元用于识别字符是数据还是指令,以及控制程序的流程等;
- 3、运算单元用于执行运算指令;
知道了图灵机的组成后,我们以简单数学运算的 1 + 2 作为例子,来看看它是怎样执行这行代码的。首先,用读写头把 「1、2、+」这 3 个字符分别写入到纸带上的 3 个格子,而后读写头先停在 1 字符对应的格子上;
接着,读写头读入 1 到存储设施中,这个存储设施称为图灵机的状态;
然后读写头向右移动一个格,用同样的方式把 2 读入到图灵机的状态,于是现在图灵机的状态中存储着两个连续的数字, 1 和 2;
读写头再往右移动一个格,就会碰到 + 号,读写头读到 + 号后,将 + 号传输给「控制单元」,控制单元发现是一个 + 号而不是数字,所以没有存入到状态中,由于 + 号是运算符指令,作用是加和目前的状态,于是通知「运算单元」工作。运算单元收到要加和状态中的值的通知后,就会把状态中的 1 和 2 读入并计算,再将计算的结果 3 存放到状态中;
最后,运算单元将结果返回给控制单元,控制单元将结果传输给读写头,读写头向右移动,把结果 3 写入到纸带的格子中;
通过上面的图灵机计算 1 + 2 的过程,可以发现图灵机主要功能就是读取纸带格子中的内容,而后交给控制单元识别字符是数字还是运算符指令,假如是数字则存入到图灵机状态中,假如是运算符,则通知运算符单元读取状态中的数值进行计算,计算结果最终返回给读写头,读写头把结果写入到纸带的格子中。
这让我想起了后缀表达式,在实现四则运算时,常会把中缀表达式转变为后缀表达式。然后运算过程可以在一个栈中通过压入弹出操作全部完成,当时我在看中缀表达式转后缀表达式过程时,虽然惊叹于这个思路,但想不明白为什么要做这么复杂的转换,看到这个突然就醍醐灌顶的感觉,原来后缀表达式是对图灵机运算过程的模拟。这样看来后缀表达式也没那么难以理解了
图灵机的意义
让我们尝试这样的思考历程:
- 我有许多很复杂的公式需要计算,如果自己一个人算的话时间会很久。
- 思考:能不能有一个东西能帮我实现公式的计算,无论这个公式有多复杂?
- 思考:我能不能设计一个模型来证实这个实行是可行的?(数学家最喜欢建模型来证明了~)
- 思考:提出“图灵机”理论,任何计算都可以简化成固定的步骤,无论多复杂的计算都能实现了。
- 某些动手能力强的数学家利用电子工程学知识将许多真空管组成了一套设备,实现了「图灵机」理论模型。
- 随着电子工程的不断发展,原本庞大的计算机不断变小,慢慢地变成了今天的计算机。
图灵机理论通过假设模型证明了任意复杂的计算都能通过一个个简单的操作完成,从而从理论上证明了「无限复杂计算」的可能性,直接给计算机的诞生提供了理论基础。从这样的思考历程来看,图灵机的出现为计算机的诞生奠定了理论基础,这就是图灵机诞生的意义。图灵的厉害之处在于在计算机出现之前奠定了计算机的理论基础,并且圈定了计算机的能力范围,至今计算机也没能跳出这个圈定的范围。因此,讨论图灵机抽象能力上界近似等价于讨论计算机的能力上界。接下来,我们一同再看看当今计算机的组成以及工作方式。
冯诺依曼模型
在 1945 年冯诺依曼和其余计算机科学家们提出了计算机具体实现的报告,其遵循了图灵机的设计,而且还提出用电子元件构造计算机,并商定了用二进制进行计算和存储,还定义计算机基本结构为 5 个部分,分别是中央解决器(CPU)、内存、输入设施、输出设施、总线。
人也是图灵机?
我们人能不能也被这样的抽象呢?人的大脑和图灵机有许多相似之处。为了方便比较,我们直接引用了前面图灵机中的几个关键元素:
存储:显然,人的大脑是有记忆能力的,这里更多指的是长期记忆。
状态:我认为人的状态至少有两个层面:
- 感知状态。也就是通过视觉,嗅觉,听觉,或者短期记忆得到的状态。通常是实时、周边的状态。
- 认知状态。人通过历史经验积累,并结合感知的信息,超过即时感官,对“环境”的一种理解。比如对于全球宏观经济判断,或者对于球赛对手水平的分析。这种也是一种状态。
程序表:人可以基于上面提到的状态,和存储,通过思考(查找程序表)得到某种行为决策。比如基于开车的知识存储和视觉的观测状态来决定方向盘和油门。
细心的人会发现,和图灵机的清晰结构分工不太一样,在人的构造中,存储、状态、程序表这三者的界限是比较模糊的,但是又似乎存在着这些模块。在我们做决策时,信号可能来自感知状态,也可能来自认知状态,也可能来自于对规则记忆存储,但是我们通常分不清到底哪一块产生了多少的作用。