基本信息
- 原书名:Art of Computer Programming, Volume 3: Sorting and Searching (2nd Edition)
- 原出版社: Addison-Wesley Professional
内容简介
作译者
目录
前言
厨师是有身份的人。
—— 提图斯·李维的《自建城以来》,罗伯特·伯顿的《忧郁的解剖》,1.2.2.2 节)
本书是第1 卷的第2 章中有关信息结构内容的自然延续,因为它为其他基本结构化思想增加了线性有序数据的概念。
书名中的“排序与查找”可能会使人误以为本书面向的只是从事一般性排序工作或信息检索工作的系统程序员。事实上,排序与查找为讨论众多重要的一般性问题提供了一个理想的框架:
好算法是怎么发z 现的?
z 如何改进给定的算法和程序?
z 如何从数学的角度分析算法的效率?
z 对于给定的任务,如何在不同的算法之间做出合理的选择?
z 在什么意义下,可以证明算法是“最可行的”?
z 计算理论同实际考虑如何相互影响?
z 如何将磁带、磁鼓或磁盘这样的外存有效应用于大型数据库?
事实上,我认为程序设计的几乎所有重要的方面都与排序或查找有关!
本卷包含整套书中的第5 章和第6 章。第5 章讨论排序,这个大问题主要划分成两个部分,即内部排序和外部排序。此外,这一章还有几个辅助性小节,讨论了有关排列(5.1 节)和最优排序方法(5.3 节)的辅助理论。第6 章讨论在表或文件中查找特定项的问题,该问题可以分为顺序查找、通过比较键进行查找、按数位性质进行查找以及散列法查找等,然后讨论了更难的辅键查找问题。这两章内容有着惊人的相互影响和很强的相似性。除了第2 章介绍的信息结构外,本书还讨论了两种重要的信息结构,即优先队列(5.2.3 节)和表示成平衡树的线性表(6.2.3 节)。与第1 卷和第2 卷一样,本书包含了其他出版物所没有的许多内容。许多人曾经以书面或口头的形式向我表达了他们的思想,我希望在用自己的语言表述时没有过度地歪曲他们的原意。
我一直没有时间系统地检索专利文献。事实上,我对当前为算法申请专利的做法深感不满(见5.4.5 节)。如果有人把本书中没有引用的相关专利发给我一份,我会在未来的版本中加以忠实的引用。不过,我还是希望人们继续发扬几百年以来形成的优良的数学传统,让新发现的算法进入公众领域。防范他人利用我们在计算机科学领域所做的贡献,并不是一种最好的谋生手段。
在从教学岗位上退下来之前,我曾用本书给大学三年级学生和研究生讲授第二门数据结构课,教学过程中省略了大部分数学内容。我还曾把本书的数学部分用作研究生算法分析课程的基础,并特别强调了5.1 节、5.2.2 节、6.3 节和6.4 节。也可以以5.3 节、5.4.4 节以及第2 卷的4.3.3 节、4.6.3 节和4.6.4 节的内容为基础,开设有关具体的计算复杂性的研究生课程。
除少数内容与第1 卷介绍的计算机有关之外,本书的大部分内容都是自成一体的。附录B 列出了本书用到的数学符号,其中有些与传统数学书中的符号略有不同。
第2 版前言
这一新版本与第1 卷和第2 卷的第3 版一样,都使用和进行排版,以此纪念这两个排版系统的完成。
将内容转换成电子格式使我能够借此机会逐个审阅文字和标点符号。我力图在保持原有的蓬勃朝气的同时加入一些可能更成熟的论断。新版增加了几十道新的习题,并为原有的几十道习题给出了改进过的新答案。改动可谓无处不在,但最重要的改动集中在5.1.4 节(关于排列和图表)、5.3 节(关于最优排序)、5.4.9 节(关于磁盘排序)、6.2.2 节(关于熵)、6.4 节(关于通用散列法)和6.5 节(关于多维树和Tries)。
媒体评论
这是一部包含一切基础算法的宝典,是它教给了这一代软件开发人员关于计算机程序设计的绝大多数知识。
——Byte杂志1995年9月刊
无数的读者谈到过高德纳的著作对于自己的深刻影响。从事研究的人惊艳于他精美优雅的分析,而普通程序员则一直在卓有成效地利用书中提供的各种方案解决日常问题。这些书展现了作者的博观、清晰、精确和幽默,所有的人都钦佩不已。
我简直说不清楚这些书给我的学习和娱乐带来了多少欢乐时光。我在各种场合一有空就仔细研读,在车上,在餐馆,上班时,回到家里……甚至有次观看我儿子的球赛,趁他没上场的时候,我还拿出来看了一阵子。
——Charles Long
它本来是当参考书写的,但有些人却发现每一卷都可以兴致勃勃地从头读到尾。有位中国的程序员甚至把它比做读诗。
如果你自以为是一个很好的程序员,请去读读高德纳的《计算机程序设计艺术》吧……要是你真把它读下来了,就毫无疑问可以给我递简历了。
——比尔·盖茨
不管你的背景如何,只要你想认真地编写计算机程序,都有很好的理由把这套书的每一卷抱回家,便于研究和工作时随时翻阅。
遇到问题需要把高德纳的著作请下书架,总是个令人愉悦的经历。我发现,只要翻一翻这些书,就会立竿见影地“镇住”计算机。
——Jonathan Laventhol