我遇到的大多数专业程序员都不太愿意去解决算法设计问题. 这点很遗憾, 因为算法
设计已成长为计算机科学的核心实用技术之一. 若想设计出正确、高效和易于实现的算法
去求解真实世界的问题, 需要了解两种不同的知识体系:
? 技术——优秀的算法设计师懂好几种基本算法设计技术, 包括数据结构、动态规
划、深度优先搜索、回溯以及启发式方法. 也许最最重要的设计技术应该就是建模
了, 它能将杂乱现实世界中的应用问题提炼精化以便于用算法攻破, 这可称得上是
门艺术.
? 资源——优秀的算法设计师都站在巨人的肩膀上. 他们不是每次都从一张白纸开始
费尽心思最后创造出新算法来解决问题, 他们会先弄清楚这个问题目前的研究现
状. 他们不是从零开始重新实现那些广为流传的算法, 他们会去寻找现有的程序实
现并以此作为起点. 他们对许多经典算法问题都非常熟悉, 这些问题为大多数应用
问题的建模提供了充足的素材.
本书意在作为算法设计的一本指南, 从而让学生和计算机从业人员能走进组合算法技
术的殿堂. 全书分为两卷: 技术和资源. 前者是对计算机算法设计和分析技术的一般性指引.
后者则可让你进行查阅和参考, 它是由多条简介构成的算法问题便览,1 其中每一条都包含
了算法资料、程序实现以及大量的参考书目.