首页 » 算法技术手册 » 算法技术手册全文在线阅读

《算法技术手册》原则:将算法和将要解决的问题分开

关灯直达底部

如果不和具体的问题联系起来,我们很难“泛化地”实现一个算法。我们反对那些给出了算法完全实现的书,这些书上的实现将泛化问题和特定问题纠结在一起,从而很难看出算法的原始结构。更糟糕的是,很多可用的实现依赖于一些特定的数据存储方式,虽然这种方式能够容易被机器理解,但是很难被人理解。

我们将会为泛化的问题和特殊的问题各设计算法的实现。例如,在第7章,当我们描述A*搜索算法的时候,我们用了一个例子,叫做八数码问题(在一个3×3格子的棋盘中移动编号为1~8的小方块)。A*算法的实现依赖于一系列良好定义的接口。因为有良好定义的接口,实现这些接口的类能够清晰地封装八数码这类特定问题的细节。

在本书中,我们使用了大量的编程语言,并且遵循一种严格的设计规范,使得代码可读性高并且生成高效的解决方案。由于我们具备软件工程背景,所以根据泛化的算法和特定领域的解决方案设计一个清晰的接口是一件很容易的事情。按照这样的流程编码,产生的软件是易于测试、维护并且能够根据面临的问题即时扩展。另外一个好处是读者能够更加容易地阅读和理解算法的描述和结果。当选择了一个算法,我们将会告诉读者,如何将我们编写的可读并且高效的代码转换成高度优化(虽然稍稍降低了可读性)并且性能优秀的代码。毕竟,优化是在问题已经解决之后才进行的,而且客户需要的是运行更快的代码。即便如此,我也认为我们需要听从C.A.R.Hoare的建议:“过早的优化是一切问题之源”。