算法入门04:时间复杂度的定义
现在结合 场景比喻(找糖果),重新整理并解释 时间复杂度的定义,一步一步来。
1. 问题背景
我们有一个数组(像一排盒子):
A[0] A[1] A[2] ... A[n-1]
现在要在这些盒子里找到糖果 k。
2. 算法(找糖果的步骤)
int i = n - 1; // 从最后一个盒子开始找
while (i >= 0 && (A[i] != k)) // 只要没找到,就继续往前
i--; // 每次往前一个盒子
return i; // 返回位置,没找到就 -1
👉 翻译成找糖果:
你先站在最后一个盒子(第 n-1 个)。
打开它,如果不是糖果 k,就往前走一步。
一直这样翻,直到找到 k,或者走到最前面还没找到。
3. 时间复杂度的定义
时间复杂度描述的是:当盒子越来越多(n 越大)时,找糖果要花多少步?
用公式表示:
T(n)=O(f(n))T(n) = O(f(n))
其中:
T(n) = 算法实际的操作次数(语句的频度总和)。
f(n) = 算法中“最核心操作”的执行次数。
O(f(n)) = 忽略常数和低阶项后的“数量级”。
4. 三种情况
最好情况:糖果就在最后一个盒子里。
只翻一次 → T(n) = 1 → O(1)
最坏情况:糖果根本不在盒子里。
要翻 n 次 → T(n) = n → O(n)
平均情况:糖果可能在任何位置。
平均翻 n/2 次 → T(n) ≈ n/2 → O(n)
5. 更一般的解释
时间复杂度就是:算法执行语句的总次数 T(n),和输入规模 n 的关系。
我们不看精确次数,而是看 数量级:当 n 变得很大时,执行次数大约增长得有多快。
✅ 一句话总结:
时间复杂度就是——当问题规模越来越大时,算法要花多少时间来完成。
就像找糖果:盒子越多,时间越长;我们用 O(1)、O(n)、O(n²)… 来衡量这种“长”的速度。
要不要我帮你整理一张 “找糖果 vs 时间复杂度”对照表,把 O(1)、O(n)、O(n²) 都换成直观的找糖果场景?