第3章
算法基础
虽说开发软件是为了解决问题,但程序员们往往太执着于是否能够解决问题本身,而不去确认这一问题是否已有解决之法。即便程序员们知道前人已在类似情况下解决了问题,但“已有的解决之法”最终是否适用于特写的问题仍是一个未知数。更重要的是,要找到完全不需要修改或者只需要稍作修改便能解决手头问题的代码并不容易。
不同的人对待算法的态度各有千秋。很多人就只是简单地在一本书中或者网站上找个算法,复制代码,运行一次,然后可能还会测试一次,如果结果正确,就开始做下一个任务。但是,在我们看来,这种使用方法无益于增进对算法的了解。事实上,这还有可能误导今后的算法选择与实现。
所以问题便是如何为任何快速地选择正确的算法,并且有足够的自信确定自己的选择是正确的。不仅如此,即便选择了正确的算法,如何高效实现又是另外一个问题。本书每一章都讲述了一系列的算法来解决某个特定的问题(例如搜索或者排序)或者一类问题(例如寻路)。本章将会阐述书中描述算法的通用格式,并总纳一些解决问题的常见方法。