我的个人编程思想——什么时候才能有速度可比性?
我缺乏团队经验,这次就有机会参与到团里。
和同事讨论到一个话题,就是“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,里面的道理同等。