我的个人编程思想——什么时候才能有速度可比性?

我缺乏团队经验,这次就有机会参与到团里。

和同事讨论到一个话题,就是“for(int i=0; i<len; i++)”遍历方式,而我不喜这种用法,就用了“for(obj in list)”的方式。同事一看,说我的方式会比他的方式要慢,不赞同我的用法。

当时我没有反驳,因为我没想过这个问题,慢么?

现在想回来,它不慢,就好比C++与Java比,一定有绝大多数人会说,C++肯定比java快。

我还是那样说,java不比C++慢。

为什么会这么认定?理由是,假定用C++处理的东西需要1小时完成,而java处理同样东西时需要3小时。

是的,这样介定起来,的确java比c++慢。不过!!!再假定一下,用C++处理的东西需要2小时完成,那么很明显,java就需要6小时。

以此类推,c++处理时间每加1小时,java就需要加3小时。

对我而言,不管c++加的量是多少,而java增加量的速度是不变的,这里要理解清楚什么叫增加的速度?

例如这里有一个方程为a^2=b,从这里来看,每增加1,那么b增加多少,就得看每次增加1的a是多少,才能确定具体这次a增加1,b会增加少。

有可能会达当a增加1时,b就会增加几亿,几十亿等天文数字。所谓增加的速度,在学术上名为时间复杂度,同样如果考虑在空间上面,就会有空间复杂度。

那么回到c++与java的对比,他们之间的增长速度是对等的,都是同一个时间复杂度。

这时候反而使用java要比c++更多时候会有更多方面的优越性了,例如跨平台,垃垃回收等。

什么是速度,对我而言,它是属于那种级别的速度,例如有最简的有n,logn和n*logn。

二分查找,就是对于预排后的查找,例如数据库的索引就是二分查找索引,快速找到资源。logn是一种随着n的增大,logn的增加速度就会不断接近于0,接近于0跟等于0有区别么?

是的,可以说没区别,像这样的二分查找,就等于说不需要时间去做。

换名话说,logn就等于1,而n*logn就等于n。

回到“for(int i=0; i<len; i++)”与“for(obj in list)”方式,当有人再提起他们的速度谁快时,就可以直接问他,你会用c++还是用java,里面的道理同等。

posted @ 2017-06-13 01:01  突破渴望  阅读(245)  评论(0编辑  收藏  举报