鄙人不耻,把编程珠玑中内容摘录下来,加深印象,仅供参考:
一、空间换时间法则:
1、修改数据结构。增加额外的信息来减少运算。
2、存储预先计算好的结果。
3、高速缓存。最经常访问的数据,其访问开销应该是最小的。
4、懒惰求值。
二、时间换空间法则:
1、堆积。笔记存储表示可以通过增加存储和检索数据所需的时间来减少存储开销。
2、解释程序。使用解释程序通常可以减少程序所需的空间,在解释程序中常见的操作序列以一种紧凑的方式表达。
三、循环法则:
1、将代码移出循环。
2、展开循环。
3、删除赋值。
4、消除无条件分支。
5、循环合并。
四、逻辑法则:
1、利用等价的代数表达式。
2、短路单调函数。
3、对测试条件重新排列。低开销、精彩成功的测试放在前面。
4、消除布尔变量。可以用if-else语句来取代布尔变量v的赋值。
五、过程法则:
1、打破函数层次。对于(非递归地)调用自身的函数,通常可以通过将其改写为内联版本并固定传入的变量来缩短其运行时间。
2、高效处理常见情况。
3、协同程序。
4、递归函数转换。
a、将递归重写为迭代。
b、如果函数的最后一步是递归调用其自身,那么使用一个到其第一条语句的分支来代替该调用,通常称为消除尾递归。
c、解决小的子问题时,使用辅助过程通常比把问题的规模变成0或1更有效。
六、表达式法则:
1、编译时初始化。
2、利用等价的代数表达式。(比如:用加法替代乘法)
3、消除公共子表达式。
4、成对计算。
5、利用计算机字的并行性。用低沉计算机体系结构的全部数据路径宽度来对高开销的表达式求值。
有空写一些简单实例来让法则更生动。^_^