怎么理解Java算法复杂度

本篇内容主要讲解“怎么理解Java算法复杂度”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么理解Java算法复杂度”吧!

创新互联建站是一家专业提供嘉峪关企业网站建设,专注与成都网站设计、做网站、H5响应式网站、小程序制作等业务。10年已为嘉峪关众多企业、政府机构等服务。创新互联专业网站制作公司优惠进行中。

大O符号

衡量时间复杂度通常使用”大O符号“。什么是大O符号?我们需要先看看一些数学知识:函数和极限。

2.1、数学举例:

00001. 一元二次函数f(x)=2x^2+2x+2;

00002. 当x趋于无穷大的时候,记作x—>∞。

00003. x->∞,f(x)=2x^2+2x+2 = 2x^2 = 2x^2。

上述第3项,当x无穷大的时候2x^2+2x+2约等于2x^2,在极限思想(算法分析)里面可以理解为2x^2+2x+2=2x^2。原因如下:

当x=5的时候:

2x^2+2x+2=62.

2x^2=50.

当x=500的时候:

2x^2+2x+2=501002

2x^2=250000.

通过上面的例子,继续增大x的值,甚至无穷大的时候,f(x)函数中的2x+2这一项就可以忽略不计了。所以x->∞时,(2x^2+2x+2)约等(2x^2),或者(2x^2+2x+2)=(2x^2)。并且在极限思想里面,2x^2前面的系数2也是可以省略的。也就是说x->∞的时候,2x^2~x^2。

通过极限的思想,我们将函数f(x)=2x^2+2x+2,省略剩余项为x^2。也就是说x->∞时,f(x)=2x^2+2x+2=x^2;使用大O符号表示:x->无穷大,f(x)=O(x^2)。

2.2、概念

大O是用来刻画被截断的无穷级数尤其是渐近级数的剩余项。大O符号表示函数的渐进性上界。就好比上面的数学举例,函数f(x)=2x^2+2x+2 渐进级数的剩余项就是x^2,记作O(x^2)。也就是说O(x^2)是f(x)的渐进性上界。

时间复杂度

题目:求1+2+3+……+n的和。(高斯算法)

● 初级程序员的代码:

… …

    for (int i = 1; i <= n; i++) {

        sum+=i;

    }

… …

分析:

00001. 上述代码中的sum+=1执行多少次? 答案:n次。

00002. int i=1执行1次。

00003. i<=n执行n+1次。(因为for循环执行的顺序,只有i大于n时才会停止循环,所以i=n+1的时候,还会再判断一下i<=n,所以相比较而言会多执行一次)。

00004. i++执行n次。

汇总一下,上述代码执行n+1+n+1+n=3n+2次。

如果用极限思维,n->∞,3n+2 ~ 3n ~ n;记作O(n)。O(n)就是上述代码的时间复杂度。

● 高级程序员的代码:

… …

   (1+n)*n/2

… …

如上,同样的计算1加到n,采用高斯算法就简单多了。上述代码只需要执行1次,没有循环。所以时间复杂度就是O(1)。

● 小结

O(1)和O(n)的区别是什么呢?当上述”初级程序员代码“和”高级程序员代码”中的变量n不断增大的时候,高斯算法的时间复杂度基本不变,还是O(1)。但是“初级程序员代码”的时间复杂度就会增加。

对于计算机来说,高斯算法求解1连续加到n的计算速度远远大于for循环的速度。速度越快,系统的性能就会越好。

到此,相信大家对“怎么理解Java算法复杂度”有了更深的了解,不妨来实际操作一番吧!这里是创新互联网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

分享文章:怎么理解Java算法复杂度
URL标题:https://www.cdcxhl.com/article48/jghsep.html

成都网站建设公司_创新互联,为您提供域名注册自适应网站品牌网站设计网站制作网站维护网页设计公司

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

成都网站建设公司