写论文和写书的大牛们……抄袭可以结束了,数据可以更新了
不少书籍、论文里都喜欢引用一些算法效率的数据,由于算法相关的材料往往更新较慢,许多数据还是N久之前的。
由于和现在的硬件条件差距过大,这种数据一旦在论文、新书等东西里引用,很容易暴露你这个数据不是自己做的,而是抄的。
我过去见过一篇论文,说486算AES是400kbps,结果呢,前几天又见一篇论文,说P4 2.4G算AES是515kbps……还说什么自己用crypto++算的,如果真是这样,crypto++这个著名算法的作者可以去撞墙了……明显这个数据就不是他自己弄出来的,很可能引用了某本老材料的数据。
实际上,去除IO速度的限制,完全在内存中加密,AES算法在我的酷睿2 E7500上可以达到近300MB/s,也就是2400mbps,P4和酷睿不过差了一代,速度有可能相差5000倍么,我用的tomcrypt纯C库难道真的比C++库快5000倍?
而且,这些数据还容易起到很严重的误导作用,我这回做移动通信鉴权中心,不少同学甚至老师等都让我关注加密算法的效率,言下之意加密算法是瓶颈,亏了我过去最多的编程时间就来自于加密算法,对他们的效率了然于胸才不至于被误导,设计中采用的假定是加密鉴权部分效率最高,不考虑网络条件限制的话应该是数据库最慢,事实证明这么设计没有错……
如果说加密算法还只是我这个专业方向中用得比较多,那么排序算法是学编程的人都会接触的吧。
请看维基百科给出的一张表:
OS: winxp, Compiler: vc8, CPU:Intel T7200, Memory: 2G
不同数组长度下调用6种排序1000次所需时间(秒)
(我只做了冒泡,插入和快速算法,已经等不及来这里骂人了,所以维基百科的表我摘出来这3种算法)
length quick insert bubble
100 0.359 0.204 0.421
1000 0.578 1.672 4
5000 3.25 41.392 101.703
10000 7.8 253.1 415.7
50000 40.6 411.88 11648.5
100000 89 16465.7 44250
再看看我的数据,注意了,我用的是QueryPerformanceCounter,别质疑我的精度,测试数据是使用WinCrypt API生成的随机内存区:
OS: winxp, Compiler: vc9, CPU:Intel E7500, Memory: 2G
length quick insert bubble
100 0.000 0.000 0.000
1000 0.000 0.000 0.001
5000 0.000 0.004 0.040
10000 0.000 0.017 0.155
50000 0.002 0.437 4.011
100000 0.005 1.757 16.023
算法代码,除了qsort使用的是VC的crt,其余的就是我从维基百科上找的!
大家有何感想,看来以严谨著称的维基百科也不能免俗,是VC8脑残?是T7200脑残?是此表的最初作者脑残?还是引用误导此表大众的维基百科脑残?