时间复杂度是什么,干嘛用? – 源码巴士

您所在的位置:网站首页 10001什么意思 时间复杂度是什么,干嘛用? – 源码巴士

时间复杂度是什么,干嘛用? – 源码巴士

#时间复杂度是什么,干嘛用? – 源码巴士| 来源: 网络整理| 查看: 265

大家初学编程,做编程练习时,可能会遇到这种情况

TLE

自己在电脑上运行输入数据,能得到正确的结果,但是网站评测的结果却是0分,或者部分分数。

我们思考一下,影响程序解决问题速度的因素有哪些?

第一个因素,问题规模。

比如同样判断质数,判断100以内的数字和一个数十亿的数字,计算量差别很大。

第二个因素,计算机性能。

超算普通电脑

同样的问题,普通电脑和超级计算机的运算时间差距,也是不可想象的。

第三,代码本身的效率。

在这里插入图片描述在这里插入图片描述

对于一个公司来说,提升网站性能的方法主要是后两点,而且提升代码效率的代价远远低于提升服务器。

而在编程竞赛中,我们的代码在评测机上进行评测,那么数据范围和计算机的性能是固定的,那我们避免超时的唯一手段就是提升代码效率。

那么时间复杂度是什么呢?

时间复杂度:衡量算法效率的指标,指出算法解决问题执行的计算工作量和问题规模的关系。

一般取最差情况时间复杂度。

我们可以把 o ()理解成大约的意思。

把计算量算出来,取其中最大的一项作为时间复杂度。

比如以下代码。

#include using namespace std; int main() { int l,a[10001]={0},m,u,v,s=0; cin>>l>>m; for(int i=0;i>u>>v; for(int j=v;j>=u;j--) { a[j]=1; } } for(int i=0;i 各种sort,线段树、树状数组、set/map、heap、dijkstra+heap、spfa、求凸包、求半平面交、二分 n≤1000000n≤1000000 => O(n) 以及常数较小的 O(nlogn) 算法 => hash、双指针扫描、并查集,kmp、AC自动机,常数比较小的 O(nlogn)) 的做法:sort、树状数组、heap、dijkstra、spfa n≤10000000n≤10000000 => O(n),双指针扫描、kmp、AC自动机、线性筛素数 n≤109n≤109 => O(n√)O(n),判断质数 n≤1018n≤1018 => O(logn),最大公约数

相信通过这篇文章,大家对时间复杂度这个概念会有更深入的理解,有问题的话欢迎评论或私信。



【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3