眨眼间, 进入了奔腾时代

云风 1999.4.7

这两天在写数据打包压缩的代码, 压缩的已经完成. 刚刚在做打包部分的时候, 包里的文件想采用 32bit ID 的形式存放方便检索. 但又想兼顾普通的字符串的形式文件名, 所以需要找个好的计算 ID 的方法(让不同的字符串对应不同的 ID).

方法很容易找到了, 这得益于前年对 RSA 加密的深入研究, 我的算法简单的多, 却也要用两个大质数, 大概需要 10 位数的质数吧. 顺手就写了个程序找一对大质数, 程序倒没有什么复杂, 我也不想用什么高速度的算法去求, 就是简单的将数字依次去除 3,5,7... 完成后运行了下, 立刻得到了大把的质数.

换个人可能不会从这想到些什么, 可我感慨万千. 记得八九年前, 刚刚开始学编程, 当时用的 Apple II/BASIC. 有一次老师叫我们求出验证 N 是否质数, 我和当时的同学一起兴致勃勃的完成这个题目. 我们相互比较谁的方法更新, 更快. 最后我用的方法是无可挑剔的. 偷偷的将每次找到的质数放在的内存里. 每次找的时候就用曾经找到的质数去筛新的结果. 这样我的程序在运行几次后 速度明显要领先其他所有的程序了, 很是得意 ;-) 当时的情形记的很清楚, 我的程序开始时, 按下回车后, 起初一次比同学的程序相同或慢点, 而后来再运行的速度是无可比拟的, 几乎是按完回车就出答案, (如果找过比那大的质数就直接对分查找就可以了 ;-) 而别人的程序却有明显的停顿.

而今天, 我又一次写类似的程序, 但用了最简单的算法, 数值却比当年的大上万倍, 可却丝毫没有运行的停顿了.这时我产生出一种奇怪的感觉, 计算机的发展速度实在是太快了, 仿佛睡一觉醒来就到了奔腾时代.

P.S. APPLE II 的 BASIC 是解释型的, 而且是采用的浮点数运算为主.这也是速度不快的原因
冷静的想想, 计算机的发展再快, 解决大多数复杂问题还是不够的, 如果是 NP 难度的, hehe 最多多算一两级, 再大就去等死吧, 所以从算法级优化程序仍旧非常必要.