2月17日的早晨非常寒冷,就算躲在被子里也可以清楚地感觉到,不过到实验室就不会觉得冷了(嗯,有空调就是好啊),所以,我很早就来了。
重新检查大家的代码,我有种想重写的冲动(呵呵),不过这正合我意,因为今天的工作就是清扫战场,做清扫的人当然是大家。
首先我把需要修改的内容列一下:
在算Prime的时候没有采用最优化的算法。我们最开始采用的方法是开一个bool类型的大数组,数组下标对应正数,然后不断用乘积的方法标出所有不是素数的数,最后再遍历一遍数组收集所有是素数的数。这种方法不是最好,还有优化的余地。
没有把算过的Prime缓存起来。其实Prime这个东西很乖,不管怎么算,一个数是Prime的那么它的性质永远都不会变,因此,适当的缓存一些数,可以提高不少效率。
采用vector存储得到的Prime。出于众所周知的原因,当vector大小改变时代价是很大的,换一个其他东西作存储或许会更好。
好,准备好问题当然就可以开工了。
作为一种优化性质的修改,最关键的就是保证原来已实现的功能不能消失、接口不能够改变。这在原来真的挺难做到(嗯,我很讨厌那种一波未平、一波又起的解决问题方式,那是一种折磨),不过现在有了单元测试用例做保证,那就没有任何疑虑了——只要通过了如此充分的单元测试,原有的功能当然没问题啦。OK,麻烦一个个被解决,无论是简单问题还是复杂问题,我们始终可以很放心的对原来的代码动刀子。
不过这种优化只是最初级的重构(哦,这就算是重构啊),比较需要勇气的还在后面——嗯,我这个合格的客户又要发挥作用了。