
一起动脑筋 · 先看一个小故事
机器人准备对十万个数逐对比较。女孩先算次数,发现可能接近百亿次。
把过程摊开来看
- 规模n = 100000
- 两层完整遍历n 乘 n
- 次数10000000000
- 决策考虑减少工作
先估算关键操作次数,再结合实际环境测试。
平方增长会让大输入变得难处理,即使单次操作很快也不够。
01什么叫 TLE?
TLE(Time Limit Exceeded)表示程序超过题目允许的运行时间。
程序可能答案逻辑正确,只是太慢。
02第一步:看最大数据范围
例如:
n ≤ 200000
复杂度要用最大 n 来估算,而不是样例里的小 n。
03第二步:估算算法复杂度
O(n)
约 2×10⁵ 级工作。
O(n log n)
通常仍很常见。
O(n²)
约 4×10¹⁰ 级,通常危险。
O(2ⁿ)
n 稍大就迅速爆炸。
04能不能用“1 秒 = 1 亿次运算”死算?
不能把它当精确规则。
05那复杂度估算还有用吗?
非常有用。它先帮助排除明显不可能的方案。
例如 n=200000 时 O(n²) 达到数百亿量级,即使不精确计时,也已经足够判断风险极高。
06除了时间还要看什么?
还要考虑空间。
例如建立一个 n×n 的 int 矩阵,当 n 很大时可能先 MLE(内存超限)。
07递归会不会影响?
会。算法总时间可能没问题,但递归深度太大仍可能导致调用栈耗尽。
08怎样形成竞赛里的估算习惯?
最大数据规模→复杂度数量级→再考虑常数和实现
你已经知道了什么
- TLE 表示程序超过时间限制。
- 估算必须看最大数据规模。
- 复杂度是判断可行性的第一层工具。
- “每秒多少次运算”只能粗略参考,不能当固定公式。
- 还要考虑空间、I/O 和递归深度。
下一篇:从题目到 AC:完整解决一道信奥题
轮到你来试一试
n 从 1000 变成 10000,n² 增长几倍?
想好了吗?点开看解释
100 倍,因为输入扩大 10 倍,平方工作量扩大 10 × 10 倍。