编程基础篇 · 复杂度:一眼看穿代码值不值
Big-O:一眼看穿代码要跑多久
姊妹篇讲完了「数据结构 = 收纳方式」,这一章讲另一半:算法 = 做事的套路。评价一个套路好不好,程序员有一把统一的尺子,叫 Big-O。别被数学符号吓到——它回答的问题只有一个:数据变多的时候,你的代码会慢多少?今天用三个交互把这把尺子装进你脑子里。
交互一 · 四条曲线分道扬镳
四种常见「套路」的耗时曲线:O(1) 灰(不管多少数据都一步到位)、O(log n) 绿(每次砍一半)、O(n) 蓝(挨个过一遍)、O(n²) 红(每个都要和每个比)。拖动滑块把数据量从 10 拉到 10 万,右侧是按「1 亿次操作/秒」换算的真实耗时。留意:前半段四条线挤在一起——数据小时啥算法都快,这正是 Demo 骗人的原因。
先拖到最左边再慢慢往右。n = 100 以内,四条线全趴在地板上——这就是「Demo 阶段一切正常」。拖过 1 万,红线开始起飞;到 10 万,O(n²) 已经要跑 100 秒,而绿线还是几乎为零。
交互二 · 数据翻十倍会怎样
换个更直接的问法:老板说「用户量要翻十倍」,四种套路各自会慢多少?点「×10」按钮,连点三次,看差距怎么滚雪球。
当前数据量 1,000条
规律先记住:数据 ×10 时,O(1) 不变、O(log n) 只 +一点、O(n) 跟着 ×10、O(n²) 直接 ×100。点几下按钮验证一下。
交互三 · 猜猜这段代码
尺子拿到手了,来验一验。三段伪代码,各选一个复杂度。诀窍:别读懂每一行,只看「数据变多时,它要多干多少活」。
为什么这把尺子对你有用?你以后验收 AI 写的代码,不需要逐行看懂,只需要问一句:「这段的复杂度是多少?数据到 10 万条还能跑吗?」AI 会老老实实告诉你。而绝大多数「上线后越来越卡」的事故,翻开一看都是一个藏在角落里的 O(n²)。下一课我们就去看大模型里最有名的那个 O(n²)——注意力机制。
✅ 这一课想和你分享的
- Big-O 只看趋势:它不关心一次跑多快,只关心「数据变多时耗时怎么涨」
- 常数不重要、趋势要命:慢 2 倍能忍,随 n² 增长等于判死刑
- 数据小时看不出来:四条曲线在 Demo 阶段挤在一起,差距要到数据变多才爆发
- n² 是大部分卡顿事故的元凶:验收代码先找嵌套循环