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