《算法导论(原书第3版)》前言
在计算机出现之前,就有了算法。现在有了计算机,就需要更多的算法,算法是计算的核心。
本书提供了对当代计算机算法研究的一个全面、综合的介绍。书中给出了多个算法,并对它们进行了较为深入的分析,使得这些算法的设计和分析易于被各个层次的读者所理解。我们力求在不牺牲分析的深度和数学严密性的前提下,给出深入浅出的说明。
书中每一章都给出了一个算法、一种算法设计技术、一个应用领域或一个相关的主题。算法是用英语和一种“伪代码”来描述的,任何有一点程序设计经验的人都能看得懂。书中给出了244幅图,说明各个算法的工作过程。我们强调将算法的效率作为一种设计标准,对书中的所有算法,都给出了关于其运行时间的详细分析。
本书主要供本科生和研究生的算法或数据结构课程使用。因为书中讨论了算法设计中的工程问题及其数学性质,所以,本书也可以供专业技术人员自学之用。
本书是第3版。在这个版本里,我们对全书进行了更新,包括新增了若干章、修订了伪代码等。
致使用本书的教师
本书的设计目标是全面、适用于多种用途。它可用于若干课程,从本科生的数据结构课程到研究生的算法课程。由于书中给出的内容比较多,只讲一学期一般讲不完,因此,教师们应该将本书看成是一种“缓存区”或“瑞典式自助餐”,从中挑选出能最好地支持自己希望教授的课程的内容。
教师们会发现,要围绕自己所需的各个章节来组织课程是比较容易的。书中的各章都是相对独立的,因此,你不必担心意想不到的或不必要的各章之间的依赖关系。每一章都是以节为单位,内容由易到难。如果将本书用于本科生的课程,可以选用每一章的前面几节内容;用于研究生的课程中,则可以完整地讲授每一章。
全书包含957道练习和158道思考题。每一节结束时给出练习,每一章结束时给出思考题。练习一般比较短,用于检查学生对书中内容的基本掌握情况。有一些是简单的自查性练习,有一些则要更充实,可以作为家庭作业布置给学生。每一章后的思考题都是一些叙述较为详细的实例研究,它们常常会介绍一些新的知识。一般来说,这些思考题都会包含几个小问题,引导学生逐步得到问题的解。
根据本书前几版的读者反馈,我们在本书配套网站上公布了其中一些练习和思考题的答案(但不是全部),网址为http://mitpress.mit.edu/algorithms/。我们会定期更新这些答案,因此需要教师每次授课前都到这个网站上来查看。
在那些不太适合本科生、更适合研究生的章节和练习前面,都加上了星号(*)。带星号的章节也不一定就比不带星号的更难,但可能要求了解更多的数学知识。类似地,带星号的练习可能要求有更好的数学背景或创造力。
致使用本书的学生
希望本教材能为学生提供关于算法这一领域的有趣介绍。我们力求使书中给出的每一个算法都易于理解和有趣。为了在学生遇到不熟悉或比较困难的算法时提供帮助,我们逐个步骤地描述每一个算法。此外,为了便于大家理解书中对算法的分析,对于其中所需的数学知识,我们给出了详细的解释。如果对某一主题已经有所了解,会发现根据书中各章的编排顺序,可以跳过一些介绍性的小节,直接阅读更高级的内容。
本书是一本大部头著作,学生所修的课程可能只讲授其中的一部分。我们试图使它能成为一本现在对学生有用的教材,并在其将来的职业生涯中,也能成为一本案头的数学参考书或工程实践手册。
阅读本书需要哪些预备知识呢?
我们收到学生的反馈,他们强烈希望提供练习和思考题的答案,为此,我们在http://mitpress.mit.edu/algorithms/这个网站上给出了少数练习和思考题的答案,学生可以根据我们的答案来检验自己的解答。
致使用本书的专业技术人员
本书涉及的主题非常广泛,因而是一本很好的算法参考手册。因为每一章都是相对独立的,所以读者可以重点查阅自己感兴趣的主题。
在我们所讨论的算法中,多数都有着极大的实用价值。因此,我们在书中涉及了算法实现方面的考虑和其他工程方面的问题。对于那些为数不多的、主要具有理论研究价值的算法,通常还给出其实用的替代算法。
如果希望实现这些算法中的任何一个,你会发现将书中的伪代码翻译成你熟悉的某种程序设计语言是一件相当直接的事。伪代码被设计成能够清晰、简明地描述每一个算法。因此,我们不考虑错误处理和其他需要对读者所用编程环境有特定假设的软件工程问题。我们力求简单而直接地给出每一个算法,而不会让某种特定程序设计语言的特殊性掩盖算法的本质内容。
如果你是在课堂外使用本书,那么可能无法从教师那里得到答案来验证自己的解答,因此,我们在http://mitpress.mit.edu/algorithms/这个网站上给出了部分练习和思考题的答案,读者可以免费下载参考。
致我们的同事
我们在本书中给出了详尽的参考文献。每一章在结束时都给出了“本章注记”,介绍一些历史性的细节和参考文献。但是,各章的注记并没有提供整个算法领域的全部参考文献。有一点可能是让人难以置信的,即使是在本书这样一本大部头中,由于篇幅的原因,很多有趣的算法都没能包括进来。
尽管学生们发来了大量的请求,希望我们提供思考题和练习的解答,但我们还是决定基本上不提供思考题和练习的参考答案(少数除外),以打消学生们试图查阅答案,而不是自己动手得出答案的念头。
第3版中所做的修改
在本书的第2版和第3版之间有哪些变化呢?这两版之间的变化量和第2版与第1版之间的变化量相当,正如在第2版的前言中所说,这些版本之间的变化可以说不太大,也可以说很大,具体要看读者怎么看待这些变化了。
快速地浏览一遍目录,你就会发现,第2版中的多数章节在第3版中都出现了。在第3版中,去掉了两章和一节的内容,新增加了三章以及两节的内容。如果单从目录来判断第3版中改动的范围,得出的结论很可能是改动不大。
我们依然保持前两版的组织结构,既按照问题领域又根据技术来组织章节内容。书中既包含基于技术的章,如分治法、动态规划、贪心算法、摊还分析、NP完全性和近似算法,也包含关于排序、动态集的数据结构和图问题算法的完整部分。我们发现虽然读者需要了解如何应用这些技术来设计和分析算法,但是思考题中很少提示应用哪个技术来解决这些问题。
下面总结了第3版的主要变化:
网站
读者可以通过http://mitpress.mit.edu/algorithms/这个网站来获取补充资料,以及与我们联系。这个网站上给出了已知错误的清单、部分练习和思考题的答案等。此外,网站上还告诉读者如何报告错误或者提出建议。
Thomas H. Cormen,新罕布什尔州黎巴嫩市
Charles E. Leiserson,马萨诸塞州剑桥市
Ronald L. Rivest,马萨诸塞州剑桥市
Clifford Stein,纽约州纽约市
----------------------------------------------------
左图为《算法导论》作者庆祝该书销量突破50万册的照片。
《算法导论》第3版中文版豆瓣:http://book.douban.com/subject/20432061/
本书配套网站:http://mitpress.mit.edu/algorithms/
各网店网址:
当当网http://product.dangdang.com/main/product.aspx?product_id=22927209
卓越网http://www.amazon.cn/dp/B00AK7BYJY
京东网http://book.360buy.com/11144230.html
互动网http://product.china-pub.com/3021144