图灵机是所有计算和AI的理论原点。它是什么,如何工作的呢?
1)开场:一支铅笔,一条纸带,一位年轻人
1936 年,一个 24 岁的年轻人叫阿兰·图灵。他没端出庞大的仪器,也没写密密麻麻的公式,只提出了一个简单到极致的主意:给我一条不限长的纸带,一个只会前后挪动的小脑袋,我就能把所有能算清楚的事,统统算清楚。
他这句话的意思是:计算到底是什么?计算就是最简单的重复动作——看一眼、改一下、挪一步、再看一眼……就像你做作业时,一边看草稿一边改正,慢慢把答案逼出来。
2)三件小道具
第一件:纸带
想象一条格子纸,往左往右都看不到尽头。每个格子里可以写“0”或“1”,也可以留空。它是记忆,更是历史:你做过什么,直接写在纸上,以后需要就走回去读。好比小学生做算术题用到的草稿纸。
小诀窍:把长记忆交给纸带,脑子里只关注“我正打算干嘛”。
第二件:读写头
这个小脑袋很倔强,一次只盯一个格子:
看一眼格子符号(读) → 把这个格子里的符号换一个(写) → 向左或向右挪一格(移)。
它要能往回走(左移),因为很多事要“回头改作业”,比如加法里的进位。
第三件:状态
“状态”不是秘密代码,就是阶段标识:比如“正在找分隔符”、“正在进位”、“准备收尾”。它有限,因为我们希望“脑子”保持小而稳定,真正复杂的东西全写在纸带上。
你可以把状态想成贴在额头上的便利贴:现在在第几步?下一步打算干嘛?
3)一段有画面的把戏:它真的会算
一元加法——“把隔板拿掉”
编码约定:用连续的 1
表示一个数,两数之间用 0
做分隔。
例:111011
表示 3 和 2。相加 = 拿掉中间那块隔板 0
,两串 1
自然拼在一起:
结果 11111
(5)。
直观比喻:像珠串中间卡着一块小木板,把木板拿走,左右两串珠子就合在一起了。
如果想把它写成一个更“图灵机味”的小程序,算法如下:
1. 扫到第一个0
→ 写成空白(删除); 2. 把右边剩下的1
逐个左移一格; 3. 遇到空白,停机。
4)图灵机为何“无所不能”?
表面看它很“简陋”:只有 0/1、左/右、有限状态。
但这恰好是不可再简的基本操作:
-
-
复杂程序 = 许多“读/写/移/换状态”的微操作拼接;
-
就像乐高只有几种基本积木,却能搭出宇宙飞船;
-
高级语言、App、AI,最终都能被编译成这类微操作序列。
-
这就是图灵机的伟大:用最少的组件,刻画了一切可计算的过程边界。
5)纸带=外部记忆,怎么用?
就三招:
-
- 分区:用一个特殊记号(比如
#
)把纸带分成“输入区 / 工作区 / 输出区”。 - 标记:处理过的符号改成
X
,像在书上打勾,提醒自己“这堆我做过了”。 - 来回跑:遇到需要回头的步骤,靠左移/右移回到某个“锚点”,继续下一轮。
- 分区:用一个特殊记号(比如
复杂算法,就是分区 + 标记 + 来回的组合拳。
6)它真的能造出来吗?
当然。你可以用打孔卡当纸带、用磁头/激光头当读写头、用一小块电路板当“状态控制器”。每一步都是机械工作:读、写、挪、下一步(换状态)。所以图灵机是理论,更是能动起来的工程原型。归约下来,现代计算机无不如此。
7)几个问题,三句就答完
Q:为什么要“无限纸带”?
A:不是要你真的用无限,而是不设上限。任何会在有限时间内结束的计算,只用到有限片段。
Q:状态多吗?难吗?
A:状态是“步骤标签”。够用就好,必须有限。长记忆写在纸上,别塞脑子里。
Q:它真的比现代电脑弱吗?
A:不。可计算的范围一样大;差别在速度和舒适度。现代电脑只是跑得更快、更好用。
Q:每条规则都是格式固定步骤吗?
A:对。一条规则完成“读当前格→在同一格写→移动一格→切换状态”这一整步。条件:当前状态 q
、当前符号 s
;结果:新状态 q'
、写入 s'
、移动方向 L/R
。数学上写成:δ(q, s) = (q', s', d)
。
8)为什么图灵机改变了世界?
-
- 它把“能算”这件事画出了边界:有些问题能做,有些(比如“忙碌海狸”)可以定义但不可计算。
- 它暗示现代计算机的灵魂:把程序也当数据写在纸带上,机器读程序就能换一身本事——这就是“存储程序”的思想。
- 它告诉我们:复杂从简单长出来。不必造一台复杂怪兽,先把最小的执行步骤钉死,一切复杂性都能由此建起。
9)给好奇心的一次“街头实验”
找一条格子纸,写上 1 0 1 1
,在右边留几格空白。
拿一支笔当“读写头”,按这个小规则走:
1)先走到最右空白;
2)往左走:遇到 1
改 0
;遇到 0
改 1
并停;
3)如果一路全是 1
,就在最左边补一个 1
。
你会亲眼看到:进位不是魔法,是“回头、改一格、再走”的朴素力气活。