第一部分 基础
第1章 开篇
首章介绍了一个历史问题:
怎样给一个磁盘文件排序?更具体地说,是对一个最多包含1千万条记录,每条记录都是7位整数的文件进行排序,而且只有1MB的内存可以使用。
借助这个问题,引出了作者的思考和对读者的启示:
- 做一个”懒”工程师。处理问题时,即便是一看上去就知道解法的问题,不要马上动手编写代码,花些时间去明确问题,抽象问题模型,结合问题的特点去分析,等灵光一现时再动手。作者在解决上题时,首先对问题进行了数学定义,考虑到问题中数据的特点以向量的方式解决了问题,并且时间复杂度和空间复杂度都较低。这样的方式不仅能收到更好的编码效果,考虑的情况会更加完善,调试起来的时间也会缩短,而且经过深度思考再动手的印象要深刻的多,等之后再遇到类似的问题时,马上就会涌现解决问题的思路,这样才能积累真正的经验。
- 时间和空间可以是双赢的。确实很多时候也许我们会在时间和空间之间做折中的选择,但是这种折中一定应该是在我们仔细分析了某方面不能再有改善的情况下,而很多情况下因为自己算法能力的不足和思维能力的局限,也许自己的算法可以在时间和空间双重优化。这就要求一方面自己要深度思考当前算法的优化空间,另一方面可以向更优秀的人请教是否有完全不同但是可以达到更好效果的方法或者对自己算法的建议,如果确实确定要做折中处理的话,要明确问题对时间和空间要求的严格性和最大容忍限度,然后在合理牺牲某方面的前提下向预定目标靠拢。
- 简单的设计。“设计者确定其设计已经达到了完美的标准不是不能再增加任何东西,而是不能再减少任何东西”,在满足要求的前提下尽量让设计简洁,有利于今后的扩展和排错,“大道至简“