如何根据数据范围,估计题目允许的时间复杂度,从而估计要用什么算法?

一般每秒能执行约 \(10^8\) 次运算(Python 可能要除以 10),可以据此估计能通过的时间复杂度,如下表所示。

数据范围允许的时间复杂度适用算法举例
\(n \leq 10\)\(O(n!)\) 或 \(O(C^n)\)回溯、暴力搜索
\(n \leq 20\)\(O(2^n)\)状态压缩 DP
\(n \leq 40\)\(O(2^{n/2})\)折半枚举
\(n \leq 10^2\)\(O(n^3)\)三重循环的 DP、Floyd
\(n \leq 10^3\)\(O(n^2)\)二重循环的 DP、背包
\(n \leq 10^5\)\(O(n \log n)\)大多数算法(各类算法都适用)
\(n \leq 10^6\)\(O(n)\)线性 DP、滑动窗口
\(n \leq 10^9\)\(O(\sqrt{n})\)判断质数
\(n \leq 10^{18}\)\(O(\log n)\) 或 \(O(1)\)二分、快速幂、数学公式