算法时间复杂度|给幼儿园小朋友的故事
下面用糖果分发、折纸游戏的小游戏,让大家都能懂程序跑得快还是慢。
什么是“时间复杂度”?
- 就像玩游戏需要时间,电脑做事也要时间。
- 时间复杂度告诉我们:当事情(n 件事)变多时,需要花的时间会怎么变化。
常见的几种“速度等级”
1. O(1):一次就搞定
- 不管有多少糖果,一按按钮就吃到。
- 例子:你按门铃响一次,和家里没人、一个人、十个人都一样快。
2. O(n):一个一个来
- 糖果多一倍,数的时间就多一倍。
- 例子:桌上有 n 颗糖,你要一个个数完,要数 n 次。
3. O(log n):对半折,快到飞起
-
每次都把要找的东西对半折,折到剩 1 件就找到。
-
折纸游戏举例(n = 8):
[1 2 3 4 5 6 7 8] ├─────┴─────┤ [1 2 3 4] [5 6 7 8] ├──┴──┤ ├──┴──┤ [1 2] [3 4] [5 6] [7 8] ├┴┤ ├┴┤ ├┴┤ ├┴┤ [1][2][3][4][5][6][7][8]
O(log n) 示例
- 折的次数:8 → 4 → 2 → 1,一共折 3 次,正好是 log₂8 = 3。
- 捉迷藏找朋友:16 个小朋友,问“他在左边还是右边?”,最多 4 次(log₂16 = 4)就能找到。
4. O(n log n):既要跑一圈,又要多轮折半
- 典型玩法:快速排序(Quick Sort),就像给糖果排队。
- 分糖果版说明:
- 每轮都要看完所有糖果(n 颗)——要跟每颗糖“打招呼”一次。
- 然后把这堆糖对半分,分别对左右两堆再做同样动作。
- 总共要做 log₂n 轮(把堆折到只剩 1 且结束),每轮花 n 次比较 → n × log₂n 次。
小朋友们要记住
| 速度等级 | 动作描述 | 举例 |
|---|---|---|
| O(1) | 一次就完成 | 按门铃 |
| O(n) | 一个接一个 | 数糖果 |
| O(log n) | 对半折,折到剩 1 | 折纸找卡片、捉迷藏 |
| O(n log n) | 每轮全跑一遍 + 多轮折半 | 快速排序分糖果 |
这样,下次再看到 O(n log n) 或 O(log n),就像在玩分糖果或折纸游戏,轻松记住速度差别啦!🎉