【编程珠玑】第九章 代码调优

一,概述

        1)代码调优的目的是什么?

              减少CPU运行时间;减少分页或增加高速缓存命中率;减少程序所需空间

        2)代码调优为什么不能“滥用”?

              1>效率的角色:不成熟的优化是大量编程灾害的根源,可能危及程序正确性、功能及可维护性。

              2>度量工具:利用性能检测工具,找到“热点”代码,即程序关键区域,然后优化。

              3>设计层面:效率问题可以从多个方面进行解决(算法和数据结构、数据结构重组、硬件升级),只有没有更好的解决方案才进行代码优化。

              4>双刃剑:有些优化在特定程序中可以提速,但在另外程序中有可能急剧减速。

      

        3)急救方案集锦

               1>整数取模(取模运算时间大于加减法执行时间)

                    k=k%n;

                    可以替换为

                    if(k>=n)  k=k-n;

                2>函数、宏、和内联代码

                     内联函数和宏具体参见博客 http://blog.csdn.net/tianshuai11/article/details/7569659

                3>顺序搜索

                     采用“哨兵”  让循环体不用 每次都判断边界。从而增加了运行速度    

                     将循环展开,替换自增。


替换为


              4>计算球面距离

        

       4)大手术---二分搜索

 

 

二,习题

        3)while 语句的开销 大于 if语句

        4)宏 不适合用于递归函数中

        5)不排序 进行二分查找,如果找到则肯定存在。找不到也不一定 不存在。

        6) isdigit(char c) {if(c>='0' && c<='9'}

例子

          7)给定一个非常长的字节序列(假设有十亿或万亿),如何高效的统计1的个数

                   题意:快速计算整数的二进制表示法中1的个数

               分析:转换为二进制然后一个一个求,是不现实的做法。蛮干不是我们想要的结果。


              方法一:(算法的时间复杂度就是1的个数)


               方法二:



        8)在程序中如何使用哨兵找出数组中的最大元素



posted @ 2012-05-15 23:23  Java EE  阅读(281)  评论(0编辑  收藏  举报