图灵机不是一台机器,是一个思想实验:一条无限长的纸带 + 一个只会"读、写、挪一格"的读写头 + 一本规则表。就这么个简陋设定,图灵用它定义了"什么是可计算的"——既证明了一切有明确步骤的问题机器都能算(通用机器,软件的种子),也证明了有些问题任何机器都永远算不了(计算的边界)。
1. 为什么值得单开一篇番外
08 篇说图灵"领先机器十年"。领先在哪?别人在琢磨怎么造计算机时,他在琢磨一个更根本的问题:
1930 年代,数学家们在追问:"计算"到底是什么?有没有办法事先判断一个问题能不能算出来?
图灵(24 岁)的回答方式很工程师:既然要定义"计算",那就造一台最简陋、但能力拉满的假想机器——凡是它能算的,就叫"可计算"。这台假想机器就是图灵机。
2. 三件套:纸带、读写头、规则表
| 部件 | 是什么 | 能做的全部动作 |
|---|---|---|
| 纸带 | 一条无限长的格子带,每格放一个符号(0、1 或空白) | ——(只是躺着被读写) |
| 读写头 | 对准某一格的"笔尖" | 读当前格、写/擦当前格、左移或右移一格(只能一格!) |
| 规则表 | 一本有限的查表手册 | 按"当前状态 + 读到的符号"决定:写什么、往哪挪、变什么状态 |
每一步都是死板的三连:读格子 → 查规则表 → 写/挪/变状态。没有任何一步需要"灵光一现"。
- 纸带无限长 → 保证不是"内存不够"卡住算法,只研究算法本身
- 读写头一次只能挪一格 → 能力上够用了(多挪几步顶多慢点),设定越简,结论越硬
- 规则表有限 → 机器的"程序"必须能被完整写下来——这是它能被"描述"的前提,后面有大用
3. 实战:用图灵机算 1101 + 1
规则表只需两条 + 一个停机状态:
状态 A 读到 1 → 写 0,左移(还在 A)
状态 A 读到 0 → 写 1,右移,进入状态 B
状态 B → 停机
三步走完(对话里的演示器可以亲手点一遍):
| 步 | 纸带 | 头在哪 | 发生了什么 |
|---|---|---|---|
| 0 | 1101 |
最右的 1 | 起点,状态 A |
| 1 | 1100 |
左一格 | 读到 1 → 写 0、左移(退位,进位没完) |
| 2 | 1110 |
回到原位 | 读到 0 → 写 1、进状态 B → 停机 |
没有加法器、没有电路、没有进位标志——一台只会查表的傻机器,算出了正确答案。而且图灵证明了:任何"有明确步骤的问题",都能写成这样一本规则表。
4. 两个改变世界的推论
推论一:通用图灵机——"软件"的种子
图灵进一步问:能不能造一台万能图灵机?可以——只要把"别的图灵机的规则表"当成数据写在纸带上喂给它。它读入规则表,就扮演那台机器。
翻译成今天的语言:规则表 = 程序,纸带 = 内存,"读入规则表去执行" = 运行软件。
- 你在手机上装微信,手机就"变成"微信机——因为 CPU 读入了微信的指令
- 05 篇的存储程序、06 篇的取指执行循环,全部是这个 1936 年思想的工程化
- 图灵机 → ENIAC(不可存程序的半成品)→ 冯·诺依曼结构——一条线贯穿到底
推论二:停机问题——机器也有"永远做不到"的事
图灵还证明了一个反面的结论:不存在一台万能判定机,能判断"任意一个程序在任意输入下会不会停下来"(停机问题)。
想写个插件自动检查"所有代码有没有死循环"?图灵 1936 年就证明:这活儿在原理上不可能——不是技术不够,是逻辑上无解。
这是人类第一次给"计算"划出边界:能算的,图灵机都能算;算不了的,再强的机器(再快的 CPU、再大的内存)也永远算不了。 这叫丘奇-图灵论题,是整个计算机科学的地基。
5. 图灵机 vs 你的电脑:一一对应
| 图灵机 | 真实计算机 |
|---|---|
| 纸带 | 内存(纸带 = 一条超长的一维内存) |
| 读写头 | CPU |
| 规则表 | 程序 |
| 当前状态 + 头的位置 | 寄存器 + 程序计数器(06 篇的"书签") |
| 停机状态 | 程序退出 |
差别只剩工程细节:真机器把纸带换成随机访问的内存(快)、把一步三连流水线化(07 篇)、把规则表换成编译好的机器码。灵魂配置 1936 年就定型了。
6. 图灵其人:天才、战争与迟来的道歉
- 破译恩尼格玛:二战期间在布莱切利园领导破解德军密码机,历史学家估计使战争缩短约两年、挽救上百万生命——但保密了几十年,他生前无人知晓。
- 图灵测试(1950):一篇论文顺手开创了人工智能——"机器能不能聊到让人分不清?"
- 悲剧(1952-1954):因同性恋被定罪、强制化学阉割,1954 年 41 岁去世(氰化物中毒,咬过浸氰化物的苹果)。
- 平反:2009 年英国政府正式道歉,2013 年女王赦免,2021 年图灵头像印上英国 50 英镑钞票——"计算机科学之父"和"人工智能之父"是同一个人。
- 计算机界的最高奖叫图灵奖("计算机界的诺贝尔奖"),以他命名。
7. 常见误区
从来没有造出来过,也不需要造——它是定义。作用相当于"用一把绝对直的尺子定义什么叫直",用来回答"什么是可计算"。 [!warning] 误区二:图灵机太简陋,能力不如现代电脑 恰相反:可以证明,任何现代电脑能算的,图灵机都能算(顶多慢)。加再多的核、再大的内存,也不改变"能算什么",只改变"算多快"。 [!warning] 误区三:停机问题是"还没解决的技术难题" 不是难题,是已被证明无解——逻辑上不存在那样的判定机。和"三等分角"一样,属于"永远做不成"而非"暂时做不到"。 [!warning] 误区四:通用图灵机就是"多功能的机器" 关键不在多功能,而在"把别的机器的规则表当数据读进来"——程序是数据。这是从"一台机器一个用途"到"一台机器无限用途"的那道门。 [!warning] 误区五:图灵机只能算 0 和 1 符号随便定,0/1、字母都行。选二进制只是因为最简,而且和真实电路(01 篇)最搭。
8. 可折叠自测题
纸带(无限长格子带)、读写头(读/写/挪一格)、规则表(查表手册)。每步固定三连:读格子 → 查规则表 → 写/挪/变状态。 [!question]- Q2. 通用图灵机是怎么"变成别的机器"的? 把目标机器的规则表当数据写在纸带上读入。对应今天:程序是数据、软件可被加载——你装 App 就是给通用机"喂规则表"。 [!question]- Q3. 停机问题说明了什么? 存在任何机器都永远无法解决的问题(如判定任意程序是否停机)。图灵机既给出了"可计算"的天花板(一切有明确步骤的问题),也划出了边界。 [!question]- Q4. 为什么说"再快的电脑也超不出图灵机"? 电脑能算的图灵机都能算,只是慢——加 CPU、加内存只改变速度,不改变能力边界。能力边界由逻辑决定,不由硬件决定。 [!question]- Q5. 图灵机里的"书签"和"寄存器"各对应真实计算机的什么? 读写头的位置 ≈ 程序计数器(06 篇的书签,记着下一步处理哪格);当前状态 ≈ 寄存器组里保存的少量上下文。规则表 ≈ 程序本体。
9. 下一步学什么
- [x] 十六进制与负数表示 —— 已写成 第 10 篇:补码为什么长那样 +
#FF8800怎么读 - [ ] 数据压缩原理 —— 哈夫曼、RLE,ZIP 到底做了什么
- [ ] 计算机五大部件 —— 冯·诺依曼结构里除 CPU 之外的其余四件
- [ ] 人工智能是怎么回事 —— 图灵测试埋下的种子(想看的话可以再加一篇番外)
- [ ] 写第一行真代码 —— 想动手的话,Python 是最好的第一门语言,说一声我带你装环境
10. 相关笔记
- 08 计算机的诞生 ← 上一篇:图灵思想如何落地成真机器
- 07 执行指令-一条指令的完整旅程 ← 读写头"读、写、挪"的工程化版本
- 05 编程是什么-给计算机下指令 ← "规则表=程序"的现代形态
- 04 实现电路计算之路 ← 与图灵并列的另一位理论功臣:香农
- 📇 计算机基础 · 索引
- 🏠 返回主页