(b)计算模型
搞懂图灵机、λ演算为何能刻画同一个'可计算'
按 空格/→ 演示下一步
全部页面点击任意一页,跳回舞台从这页播放
(b)计算模型
搞懂图灵机、λ演算为何能刻画同一个'可计算'
: 性能测度
上页我们认识了图灵机、RAM 机这些计算模型——但光有「选手」还不够,得有一套尺子才能比出谁快谁省。这就是性能测度要做的事。
用时衡量速度(与选手体重无关),跑道长度衡量场地;都是剥离硬件后的标准指标
: 问题规模
上一节我们说 T(n)、S(n) 是性能测度,但括号里的 n 到底是什么?排序时是元素个数,加密时是数字的位数,建图时是顶点数还是边数?选错尺子,再好的复杂度分析也会失真。
箱子数衡量'搬多少',n 衡量'算多大规模';搬家费基于箱子数,T(n) 基于 n
: 最坏情况
前页我们用规模 n 衡量输入大小,但同样 n 下不同输入会让算法耗时天差地别。最坏情况给的是一条「天花板」——无论输入多刁钻,运行开销都不会越过这条线。
大坝按历史最大可能洪水而非平均流量设计,给的是「再大的雨也不会溃坝」的硬保证
: 理想模型
上一页我们对比了两个算法在最坏情况下的代价。但'一次比较'到底算多贵?要公平较量算法,得先把硬件差异、系统差异抽掉——这就是理想模型要做的事。
都把现实中的摩擦、扰动抽掉,只保留能反映本质的规律
: 图灵机
上一节说要一个'理想模型'来定义计算的边界。1936 年图灵交出的答案——图灵机——至今仍是学界最广泛接受的标尺。
管理员=控制器/状态;书架格子=纸带单元;手册=转移函数δ
: 图灵机实例
上页我们看到了图灵机的抽象结构:纸带、读写头、状态、规则表。但抽象归抽象,一个具体的图灵机到底长什么样?下面看两个经典例子。
一次只看一格、规则书就是程序、账本无限延伸就是纸带
: RAM模型
图灵机把每一步读写都展开,分析很严谨,却容易反复陷入“读写头怎么走”的机械细节。若只想比较算法速度,可以先把这些动作压成统一计费规则——这就是 RAM 模型。
程序给地址,就像管理员报柜号;模型规定直接取物并统一计费,忽略真实移动与排队。
: RAM实例
上一页给出了 RAM 的规则,但没有说明一次分析从哪里开始。固定一个算法,再放入具体输入,就得到可逐步跟踪的 RAM 实例。
菜谱相当于程序,食材和用量相当于输入,具体烹饪过程对应实例及代价
本节要点
- ✓性能必须依附模型——脱离图灵机或RAM谈快慢无意义
- ✓大O刻画增长趋势,常数与底层模型共同决定实际耗时
- ✓最坏情况是算法的承诺上限,不代表典型表现
- ✓图灵机回答「能不能算」,RAM回答「算多快」
课后思考
三个开放问题,先自己琢磨 5 分钟再翻参考答案。
参考答案真实机器太复杂——缓存、流水线、操作系统都会干扰。理想模型把这些细节剥离,只保留“顺序执行、每步代价为 1”的核心抽象,让我们能专心度量算法本身的思想代价,而不是机器的工程噪声。
参考答案结论的“形状”通常成立,但常数因子会被真实硬件扭曲。RAM 假设每条指令代价恒为 1,真实机器却有缓存命中/未命中、分支预测、并行度等差异——同一算法在不同机器上可能差出几十倍。
参考答案需要更细致论证。时间维度的等价靠“一格移动对应一次寄存器访问”的代价匹配;空间维度上,多带图灵机与 RAM 的开销并不同步,对数空间等价有专门定理,不能直接套用时间结论。