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

 写在前面:大家好!我是ACfun,我的昵称来自两个单词Acceptedfun。我是一个热爱ACM的蒟蒻。这篇博客来详解一下如何由题目的数据范围反推算法的时间复杂度以及算法的内容。如果博客中有不足或者的错误的地方欢迎在评论区或者私信我指正,感谢大家的不吝赐教。我的唯一博客更新地址是:https://ac-fun.blog.csdn.net/。非常感谢大家的支持。一起加油,冲鸭!
用知识改变命运,用知识成就未来!加油 (ง •̀o•́)ง (ง •̀o•́)ง

评测机1秒最多可以运行几次

 一般评测机一秒最多可以运行 一亿次10^8次。而一般编程竞赛都会将时间限制为 1000ms1s。在这种情况下,C++ 代码的操作次数控制在 1 0 7 10^7 107 ~ 1 0 8 10^8 108 为最佳。我们可以根据题目给出的数据范围来大致的判断一下对于该题我们使用的算法的时间复杂度大致为多少,也就帮助我们更快的找到可以用什么算法来解决该问题,更快更好的完成题目。

如何根据数据范围判断大致时间复杂度

 下面来给出不同数据范围下应该如何选择算法的时间复杂度以及算法:

数据范围算法时间复杂度可选择算法
n ≤ 30指数级别的算法暴力搜索、dfs+减枝、状态压缩dp
n ≤ 100O(n3)floyd,dp
n ≤ 1000O(n2),O(n2logn)dp,二分,朴素版Dijkstra、朴素版Prim、Bellman-Ford
n ≤ 10000O(n∗ n \sqrt{n} n )块状链表、分块、莫队
n ≤ 100000O(nlogn)各种sort,线段树、树状数组、set/map、heap、拓扑排序、dijkstra+heap、prim+heap、spfa、求凸包、求半平面交、二分
n≤1000000O(n) , 以及常数较小的 O(nlogn) 算法hash、双指针扫描、并查集,kmp、AC自动机,常数比较小的 O(nlogn)O(nlogn) 的做法:sort、树状数组、heap、dijkstra、spfa
n≤10000000O(n)双指针扫描、kmp、AC自动机、线性筛素数
n≤109O( n \sqrt{n} n )判断质数
n≤1018O(logn)最大公约数,快速幂
n≤101000O((logn)2)高精度加减乘除
n≤10100000O(logn×loglogn)高精度加减、FFT/NTT

参考文档:由数据范围反推算法复杂度以及算法内容


我是ACfun,感谢大家的支持!
今天谁也别想阻止我好好学习!

评论 42
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晴空๓

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值