- 减少程序的空间也会减少其运行时间。
- 设计者确定其设计已经达到了完美的标准,不是不能再增加任何东西,而是不能再减少东西。
- 他不能解决问题,是因为他企图解决错误的问题。问题的解决,是通过打破他的概念壁垒,进而去解决一个较简单的问题而实现的。
- 恰当的数据视图实际上决定了程序的结构。
- 程序员在考虑该问题时受到了语言的限制。
- 正确性分析是自下而上进行的:从每个独立的代码行开始,检查它们是如何协同运作并解决问题的。
- 总是保持对代码的正确理解,不要理会那种 “只要让程序工作,怎么改都行” 的催促。
- 当他们编写程序的时候,“困难” 的部分第一次就可以正确运行,而那些 “容易” 的部分往往会出毛病。
- 有时候,良好的问题定义可以避免用户对问题需求的过高估计。
- 如果仅需要较小的加速,就对效果最佳的层面做改进。如果需要较大的加速,就对多个层面做改进。
- 在进行粗略估算的时候,要切记爱因斯坦的名言:任何事都应尽量简单,但不宜过于简单。
- 算法设计技术:保存状态,避免重复计算。将消息预处理至数据结构中,累加数组。
- C 程序员经常需要在性能和正确性之间折中,而 C++ 程序员却可以享受鱼与熊掌兼得的快乐。
- 对于现代的计算机来说,将循环展开有助于避免管道阻塞,减少分支,增加指令级的并行性。
- 代码调优的最重要原理就是尽量少用它。不成熟的优化是大量编程灾害的根源,它会危及程序的正确性、功能性以及可维护性。
- 简单性可以延伸出功能性、健壮性以及速度和空间。
- 使用指针来共享大型对象 (比如长文本字符串) 可以消除存储同一对象的众多副本所需的开销,但是程序员在修改共享对象时必须小心谨慎地确保该对象的所有拥有者都希望更改。
- 一般来说,如果要从 r 个剩余的整数中选出 5 个,我们以概率 s/r 选择下一个数。
- 很多程序员很快就发现问题的 “解决方案”,他们只愿意花 1 分钟的时间思考,然后花一天的时间来写代码,而不是先花 1 小时来思考,再用 1 小时来写代码。
- 存储预先计算好的结果。对于开销较大的函数,可以只计算一次,然后将计算结果存储起来以减少开销。
- 在数据结构的边界上放一个哨兵以减少测试是否已搜索结束的开销。
- 在组织逻辑测试时,应该将低开销的、经常成功的测试放在高开销的,很少成功的测试前面。