假设我们现在要实现一个业务系统。有时客户会提供现成的计算公式,我们只要按照公式去实现就可以了,但有时又需要我们自己去思考如何计算,这时就必须考虑算法的效率问题了。
如果遇到的是未知的问题,想出一个新的算法简直难于登天。好在大多数时候,我们可以直接使用研究人员已经发现的那些高效的算法,毫不费力地进行编程。但是,要想使用那些算法,也必须提前了解各种问题的解题方法才行。
以入学考试为例,我们在备考期间做历年真题的意义就在于此。如果事先知道“有没有类似的问题”“需要花多长时间才能解决”,就能判断出某个程序是否可以实现,并估算出实现需要花费的时间。
但是,针对某个问题,如果完全没见过与之类似的问题,那么可能就很难去解决了。比如在解答谜题时,如果连下面这些基本的算法知识都不懂,解题所花的时间可能就会超乎想象。
● 排序(选择排序、冒泡排序、快速排序、归并排序等)
● 搜索(线性搜索、二分查找、深度优先搜索、广度优先搜索、双向搜索等)
● 最短路径问题[迪杰斯特拉(Dijkstra)算法、贝尔曼-福特(Bellman-Ford)算法等]
如果你没有听说过这些名词,最好在阅读本书之前看一下其他的算法入门书。对于学过这些算法的读者,本书的练习能够帮助你进一步学习算法。