编程珠玑读书笔记之代码调优
时间:2010-11-03 来源:小培
b. 函数,宏和内联函数
内联函数优先使用,函数次之,宏最后。
c. 顺序搜索
传统算法:
int search1(t)
for i = [0,n)
if x[i] == t
return i
return -1;
两个改进点,
1:在数组最后面添加一个标志位,从而可以免除每次循环开始时的判断,完全依靠break跳出循环。
2:将循环展开,一次循环,对个位置检测
int search3(t)
x[n] = t; //设置标志位,之前这个位置应该是没有用处的
for( i = 0;;i+=8)
if(x[i ] == t ) break;
if(x[i+1] == t ) { i+=1; break;}
if(x[i+2] == t ) { i+=2; break;}
if(x[i+3] == t ) { i+=3; break;}
if(x[i+4] == t ) { i+=4; break;}
if(x[i+5] == t ) { i+=5; break;}
if(x[i+6] == t ) { i+=6; break;}
if(x[i+7] == t ) { i+=7; break;}
if i == n
return-1
else
returni
减少检测数量,展开循环,大概可以降低运行时间60%。循环展开8最好,再大也没有太好的效果。
d. 计算球面距离
当算法解决出现问题时,考虑采用不同的数据结构表示数据,然后在此基础上进行代码调优。
2. 大手术-二分搜索
减少比较次数,展开循环到极致
3.原理
a.效率,不成熟的优化是大量编程灾难的根源。
b.度量工具,监视性能的陷阱。
c.设计层面,只有在确信没有更好的解决方案时才考虑进行代码调优。
d.双刃剑。玩火者,小心自焚。