快慢看得出

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++;

复杂度让我们写之前就估算:题目 次必超时,得换更快的算法。

经验尺度:一秒大约能算 次左右。看到数据范围就反推能接受的复杂度,是考试选算法的第一步。坑: 描述的是增长趋势,不是精确次数,别拿它算实际时间。

小纸条

复杂度描述的是运行时间随什么变化?

登录 后可看答案