复杂度再练
约 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)
估算方法:把各层循环的执行次数相乘,再看最大的那项。实战经验:现在的评测机大约每秒能跑 次简单运算。据此对着数据范围反推—— 只能用 或 ; 可以 ; 往往要 的搜索。坑:别纠结 的底是 还是 (只差常数、不影响量级),也别漏算藏在函数里的循环。
小纸条
广搜遍历整张图是什么复杂度?
登录 后可看答案