图书前言

我遇到的大多数专业程序员都不太愿意去解决算法设计问题. 这点很遗憾, 因为算法

设计已成长为计算机科学的核心实用技术之一. 若想设计出正确、高效和易于实现的算法

去求解真实世界的问题, 需要了解两种不同的知识体系:

? 技术——优秀的算法设计师懂好几种基本算法设计技术, 包括数据结构、动态规

划、深度优先搜索、回溯以及启发式方法. 也许最最重要的设计技术应该就是建模

了, 它能将杂乱现实世界中的应用问题提炼精化以便于用算法攻破, 这可称得上是

门艺术.

? 资源——优秀的算法设计师都站在巨人的肩膀上. 他们不是每次都从一张白纸开始

费尽心思最后创造出新算法来解决问题, 他们会先弄清楚这个问题目前的研究现

状. 他们不是从零开始重新实现那些广为流传的算法, 他们会去寻找现有的程序实

现并以此作为起点. 他们对许多经典算法问题都非常熟悉, 这些问题为大多数应用

问题的建模提供了充足的素材.

本书意在作为算法设计的一本指南, 从而让学生和计算机从业人员能走进组合算法技

术的殿堂. 全书分为两卷: 技术和资源. 前者是对计算机算法设计和分析技术的一般性指引.

后者则可让你进行查阅和参考, 它是由多条简介构成的算法问题便览,1 其中每一条都包含

了算法资料、程序实现以及大量的参考书目.