首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

时间复杂度的区别测评!O(n)、O(nlogn)、O(n^2)、O(n^3)以最长子段和为例

2012-11-05 
时间复杂度的差异测评!O(n)、O(nlogn)、O(n^2)、O(n^3)以最长子段和为例时间复杂度的差异测评前言:大家都知道

时间复杂度的差异测评!O(n)、O(nlogn)、O(n^2)、O(n^3)以最长子段和为例

时间复杂度的差异测评前言:大家都知道,判断一个算法够不够好,一个很重要的标准就是算法的时间复杂度 ,同样一个问题,不同的算法执行的时间差异可以很大!这个就是时间复杂度导致的,关于时间复杂度的定义等,本菜鸟不予说明,大家可以参考各大算法或者数据结构书籍,里面有详细的解释,今天给大家带来的是不同时间复杂度算法运行时间的差异!
测试题目:输入一个数据n(0,1000000),然后输入n个数据(-1000,1000),求出最长子段和。样例输入:5-1 5 6 -3 7
样例输出:15
题目分析:这是一个很经典的DP问题,大部分人都知道,这里将分别用O(n^3)、O(n^2)、O(nlogn)、O(n)算法求解。
O(n^3)算法:这是一个很容易想到的算法(PS:当初我还没想出来。。。)。该算法使用3重循环,将所有子段的和求出,然后求出和最大的。代码如下:


从上面的数据结果我们发现,所有算法的时间没什么差异,甚至O(n)算法时间要长。不要急,接着往下看!一千个数据:时间复杂度的区别测评!O(n)、O(nlogn)、O(n^2)、O(n^3)以最长子段和为例

这下我们发现不同了吧,O(n^3)算法的时间为其他时间的30多倍。。。。。  O(n^3)完败!。。不过其他算法还未分出胜负,咱们接着比。一万个数据:时间复杂度的区别测评!O(n)、O(nlogn)、O(n^2)、O(n^3)以最长子段和为例

这时候O(n^3)已经运行不出来了。。O(n^2)也被甩了一大截。。。还有两个兄弟没分出胜负,咱们继续:十万个数据:时间复杂度的区别测评!O(n)、O(nlogn)、O(n^2)、O(n^3)以最长子段和为例

这时候O(n^2)也运行不出来了。。O(n)小胜。。百万个数据:时间复杂度的区别测评!O(n)、O(nlogn)、O(n^2)、O(n^3)以最长子段和为例
1000000的数据量,O(n)已经比O(nlogn)快了将近一倍,这下冠军已经产生了!O(n)!
测试总结:根据上面结果,我绘制了以下表格:第一列为时间复杂度,第一行为数据个数,中间数据为时间(秒为单位)。

 

100

1000

10000

100000

1000000

O(n)

0.035

0.034

0.041

0.049

0.339

O(nlogn)

0.028

0.023

0.032

0.069

0.580

O(n^2)

0.025

0.026

0.357

--------

----------

O(n^3)

0.023

0.655

------

--------

---------


现在我们可以发现了吧,一个好的算法有多么的重要!!所以大家一定要好好学习算法,这个才是编程的精髓所在!!!

1楼NO_ERROR32昨天 16:03
[code=cpp]nif(body == “发烧”)n{n printf("大神求破");n}n[/code]

热点排行