复杂度再练

10 分钟

看代码结构就能报复杂度,这是估算"能不能过"的基本功。常见对应:一层循环 ;两层嵌套 ;每次把规模砍一半(二分、快速幂);排序 。图的 BFS/DFS 遍历,每个点进出一次、每条边看一次,是 (别错记成 ,那是邻接矩阵的遍历)。

for (int i = 0; i < n; i++)           // O(n)
    for (int j = 0; j < n; j++)       // 再套一层 -> O(n^2)
        work();

while (l < r) { int mid = (l+r)/2; }  // 每次砍半 -> O(log n)

估算方法:把各层循环的执行次数相乘,再看最大的那项。实战经验:现在的评测机大约每秒能跑 次简单运算。据此对着数据范围反推—— 只能用 可以 往往要 的搜索。坑:别纠结 的底是 还是 (只差常数、不影响量级),也别漏算藏在函数里的循环。

小纸条

广搜遍历整张图是什么复杂度?

登录 后可看答案

复杂度再练 · 考级冲刺 · op599 课程