由数据范围推算法复杂度
ACM或笔试题的时间限制为1s或2s,C++代码的操作次数应该控制在 1 0 7 10^7 107— 1 0 8 10^8 108最佳.
针对给出的数据范围,反推时间复杂度以及选择算法:
数据范围 | 时间复杂度 | 算法 |
---|---|---|
n ≤ 30 n≤30 n≤30 | 指数级别 | dfs+剪枝,状态压缩dp |
n ≤ 100 n≤100 n≤100 | O ( n 3 ) O(n^3) O(n3) | floyd,dp,高斯消元 |
n ≤ 1 0 3 n≤10^3 n≤103 | O ( n 2 ) , O ( n 2 l o g n ) O(n^2), O(n^2logn) O(n2),O(n2logn) | dp,二分,朴素版Dijkstra,朴素版Prim,Bellman-Ford |
n ≤ 1 0 4 n≤10^4 n≤104 | O ( n ∗ n ) O(n*\sqrt[]{n}) O(n∗n) | 块状链表,分块,莫队 |
n ≤ 1 0 5 n≤10^5 n≤105 | O ( n l o g n ) O(nlogn) O(nlogn) | 各种sort,线段树,树状数组,set/map,heap,拓扑排序,dijkstra+heap,prim+heap,Kruskal,spfa,求凸包,求半面交,二分,CDQ分治,整体二分,后缀数组,树链剖分,动态树 |
n ≤ 1 0 6 n≤10^6 n≤106 | O ( n ) O(n) O(n)及常数较小的 O ( n l o g n ) O(nlogn) O(nlogn)算法 | 单调队列,hash,双指针扫描,并查集,kmp,AC自动机;sort,树状数组,heap,dijkstra,spfa |
n ≤ 1 0 7 n≤10^7 n≤107 | O ( n ) O(n) O(n) | 双指针扫描,kmp,AC自动机,线性筛素数 |
n ≤ 1 0 9 n≤10^9 n≤109 | O ( n ) O(\sqrt[]{n}) O(n) | 判断质数 |
n ≤ 1 0 18 n≤10^{18} n≤1018 | O ( l o g n ) O(logn) O(logn) | 最大公约数,快速幂,数位DP |
n ≤ 1 0 1000 n≤10^{1000} n≤101000 | O ( ( l o g n ) 2 ) O((logn)^2) O((logn)2) | 高精度加减乘除 |
n ≤ 1 0 100000 n≤10^{100000} n≤10100000 | O ( l o g k × l o g l o g k ) O(logk × loglogk) O(logk×loglogk), k k k表示位数 | 高精度加减,FFT/NTT |
原文链接
https://www.acwing.com/blog/content/32/