由数据范围反推算法复杂度以及算法内容

1.时间复杂度(下)

一般ACM或者笔试题的时间限制是1秒或2秒。

在这种情况下,C++代码中的操作次数控制在 1 0 7 ∼ 1 0 8 10^7 \sim 10^8 107∼108 为最佳。

下面给出在不同数据范围下,代码的时间复杂度和算法该如何选择:

n ≤ 30 n \le 30 n≤30, 指数级别, dfs+剪枝,状态压缩dp

n ≤ 100 n \le 100 n≤100 => O ( n 3 ) O(n^3) O(n3),floyd,dp,高斯消元

n ≤ 1000 n \le 1000 n≤1000 => O ( n 2 ) O(n^2) O(n2), O ( n 2 l o g n ) O(n^2logn) O(n2logn),dp,二分,朴素版Dijkstra、朴素版Prim、Bellman-Ford

n ≤ 10000 n \le 10000 n≤10000 => O ( n ∗ n ) O(n * \sqrt n) O(n∗n ),块状链表、分块、莫队

n ≤ 100000 n \le 100000 n≤100000 => O ( n l o g n ) O(nlogn) O(nlogn) => 各种sort,线段树、树状数组、set/map、heap、拓扑排序、dijkstra+heap、prim+heap、Kruskal、spfa、求凸包、求半平面交、二分、CDQ分治、整体二分、后缀数组、树链剖分、动态树

n ≤ 1000000 n \le 1000000 n≤1000000 => O ( n ) O(n) O(n), 以及常数较小的 O ( n l o g n ) O(nlogn) O(nlogn) 算法 => 单调队列、 hash、双指针扫描、BFS、并查集,kmp、AC自动机,常数比较小的 O ( n l o g n ) O(nlogn) O(nlogn) 的做法:sort、树状数组、heap、dijkstra、spfa

n ≤ 10000000 n \le 10000000 n≤10000000 => O ( n ) O(n) O(n),双指针扫描、kmp、AC自动机、线性筛素数

n ≤ 1 0 9 n \le 10^9 n≤109 => O ( n ) O(\sqrt n) O(n ),判断质数

n ≤ 1 0 18 n \le 10^{18} n≤1018 => O ( l o g n ) O(logn) O(logn),最大公约数,快速幂,数位DP

n ≤ 1 0 1000 n \le 10^{1000} n≤101000 => O ( ( l o g n ) 2 ) O((logn)^2) O((logn)2),高精度加减乘除

n ≤ 1 0 100000 n \le 10^{100000} n≤10100000 => O ( l o g k × l o g l o g k ) , k 表示位数 O(logk \times loglogk),k表示位数 O(logk×loglogk),k表示位数,高精度加减、FFT/NTT

相关推荐
Sarvartha5 分钟前
C++ STL 栈的便捷使用
c++·算法
夏鹏今天学习了吗1 小时前
【LeetCode热题100(92/100)】多数元素
算法·leetcode·职场和发展
飞Link1 小时前
深度解析 MSER 最大稳定极值区域算法
人工智能·opencv·算法·计算机视觉
bubiyoushang8881 小时前
基于CLEAN算法的杂波抑制Matlab仿真实现
数据结构·算法·matlab
2401_894828122 小时前
从原理到实战:随机森林算法全解析(附 Python 完整代码)
开发语言·python·算法·随机森林
Remember_9932 小时前
【LeetCode精选算法】前缀和专题二
算法·哈希算法·散列表
源代码•宸2 小时前
Leetcode—509. 斐波那契数【简单】
经验分享·算法·leetcode·面试·golang·记忆化搜索·动规
博大世界3 小时前
matlab结构体数组定义
数据结构·算法
Loo国昌3 小时前
【LangChain1.0】第九阶段:文档处理工程 (LlamaIndex)
人工智能·后端·python·算法·langchain
Zach_yuan3 小时前
面向对象封装线程:用 C++ 封装 pthread
开发语言·c++·算法