这一章主要说明了一个问题,也就是写代码过程中最重要又最容易被忽略的问题-----代码的执行效率。
验证一个程序的正确与否,最直观的是看输出是否达到预期。但评价一个程序的好坏,还是得从性能上去评估。
学习编程之初就学到时间复杂度和空间复杂度的概念,可是如何提高代码的效率,如何很好的减小各种系统开销却没有很明确的说法。
就像医生用听诊器去诊断病人的患处一样,程序员用性能监视器来观察一个程序执行各个部分的频率。
文章举例了一个“查找1000以内的所有素数”的例子,然后通过对问题的进一步分析一步步对代码进行优化,从监视器里很明显看到无论是从执行时间还是CPU占用率上,修改后的代码所执行的频率要少的多。这里得到的收获就是:
1、小细节能解决大问题,比如说P3中多开辟了一个存储空间bound来单独存放sqrt的开方结果,这样可以减少for中调用sqrt的次数;
2、深入对问题的分析找规律,这个例子求得是素数,当了解到什么是素数的概念后找出特性规律,可以进一步的改写代码结构,一般的质数是指“只能够被1和自己整除”,而合数都是指能被“能够被自己和1以外的数整除的数”,并且近3/4的数都包含了质因子2,3,5,利用这个特性可以很大程度的减少比较次数。
3、能用乘法就不要开方,能加法就不要做乘法,由于计算机只会做加法运算,其他的运算都是在加法的基础上做移位求反,因此越复杂的计算越费时需要的执行次数越多。
一个很重要的研究结果是:一个程序中不到4%的语句通常占用了一半以上的运行时间。也就是说操作系统一半的时间花在一个只有少数几条指令的循环上。
以上是本人的薄见.....如有不对欢迎指正拍砖~~~