第二章 啊哈!算法
不要急于动手写代码,坐下来,耐心思考,等待灵机一动的时刻。
匆忙之间写出的代码,维护性、可读性以及性能,都可能存在很大的不足。而优秀的程序员总是能够把握住思考和编程之间的恰当时机。
这一章用来展开的三个问题是大文件查找(40亿个整数中找不存在的那个)、向量旋转和变位词。
大文件查找问题,对二分查找进行了展开。二分查找的性能极其优异,在查找元素的时候应该优先想到它。当内存空间不够的时候,可以考虑对需要处理的元素进行预处理,这也是常见的操作之一。
绝大部分的问题都可以用基本操作来解决,当你坐下来思考,尝试获得解决问题的灵感时,可以思考需要解决的问题是什么,以及可能涉及的基本操作。
第三章 数据决定程序结构
能够用小程序实现的,就不要用大程序来做。
高级语言和各种工具极大丰富的今天,很多功能不一定要写代码来实现,完全可以通过Excel或者其他工具来做。
比如,简单地排序和提取数据,Excel会比bash、perl等脚本语言更直观也更好上手。
另外,如果穷举能解决大部分问题,就不要太费心去实现复杂的逻辑。比如,给定年份和该年中的某一天,要获取对应的月份,直接在内存中存储一个映射关系会比实现复杂的逻辑更方便。
并且,更一般的问题也许更易于实现。
也就是说,在尝试解决某个特定的问题之前,可以先尝试解决某一类问题。
另一方面,写代码的时候,可以审视一下,看看是否存在重复性部分。把这些部分抽取出来,更容易发现问题,也更便于后续的维护和拓展。