快慢看得出
约 8 分钟
同一道题,不同写法可能一个瞬间出结果、一个跑到超时。我们不去数具体多少毫秒(那和机器、编译器有关),而用时间复杂度描述:当数据规模 变大时,运行时间大致怎样增长。它用大 记号写,只保留增长最快的那一项、忽略常数。
比如一段代码执行约 次记作 ;执行约 次记作 。
// O(n):随 n 线性增长
for (int i = 0; i < n; i++) sum += a[i];
// O(n^2):两层嵌套
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++) cnt++;
复杂度让我们写之前就估算:题目 到 、 次必超时,得换更快的算法。
经验尺度:一秒大约能算 次左右。看到数据范围就反推能接受的复杂度,是考试选算法的第一步。坑: 描述的是增长趋势,不是精确次数,别拿它算实际时间。
小纸条
复杂度描述的是运行时间随什么变化?
登录 后可看答案