AcWing《算法基础课》第7章 时空复杂度分析
一般ACM或者笔试题的时间限制是1秒或2秒
C++
一般1s能计算107~108次,在这种情况下,C++
代码中的操作次数控制在 107为最佳
在不同数据范围下,代码的时间复杂度和算法的选择技巧如下:
- n≤30,指数级别
- dfs+剪枝
- 状态压缩dp
- n≤100,O(n3)
- floyd
- dp
- n≤1000,O(n2),O(n2logn)
- dp
- 二分
- 朴素版Dijkstra
- 朴素版Prim
- Bellman-Ford
- n≤10000,O(n√n)
- 块状链表
- 分块
- 莫队
- n≤105,O(nlogn)
- 各种排序算法
- 线段树
- 树状数组
- set/map
- heap
- 拓扑排序
- 堆优化Dijkstra
- 堆优化Prim
- SPFA
- 求凸包
- 求半平面交
- 二分
- n≤106
- O(n)
- Hash
- 双指针扫描
- 并查集
- KMP
- AC自动机
- 常数较小的O(nlogn)
- 排序
- 树状数组
- heap
- Dijkstra
- SPFA
- O(n)
- n≤107,O(n)
- 双指针扫描
- KMP
- AC自动机
- 线性筛素数
- n≤109,O(√n)
- 判断质数
- n≤1018,O(logn)
- 最大公约数
- 快速幂
- n≤101000,O((logn)2)
- 高精度加减乘除
- n≤10100000,O(logn×loglogn)
- 高精度加减
- FFT/NTT
小技巧
- log210n=3n
- 64MB至多开1600万个
int
P.S.
参考y总的由数据范围反推算法复杂度以及算法内容{:target=”_blank”}