基本信息
- 原书名:Data Structures and Algorithm Analysis in C++, Third Edition
- 原出版社: Addison-Wesley
编辑推荐
Mark Allerl Weiss教授撰写的数据结构与算法分析方面的著作曾被评为20世纪最佳的30部计算机著作之一,已经成为公认的经典之作,被全球数百所大学采用为教材,广受好评。 本书秉承Weiss著作一贯的严谨风格,同时又突出了实践。书中充分应用了现代C++语言特性,透彻地讲述了数据结构的原理和应用,不仅使学生具备算法分析能力,能够开发高效的程序,而且让学生掌握良好的程序设计技巧。
内容简介
作译者
目录
1.1 本书讨论的内容 1
1.2 数学知识复习 2
1.2.1 指数 2
1.2.2 对数 2
1.2.3 级数 3
1.2.4 模运算 4
1.2.5 证明方法 4
1.3 递归的简单介绍 6
1.4 C++类 9
1.4.1 基本class语法 9
1.4.2 特别的构造函数语法与访问函数 10
1.4.3 接口与实现的分离 11
1.4.4 vector和string 13
1.5 C++细节 14
1.5.1 指针 14
1.5.2 参数传递 15
1.5.3 返回值传递 16
1.5.4 引用变量 16
1.5.5 三大函数:析构函数、复制构造函数和operator= 17
译者序
书中论述了数据结构(大量数据的组织方法)以及算法分析(算法运行时间的估算)。书中采用当前流行的面向对象语言C++来描述数据结构和算法,并提供了大部分算法的C++程序和伪代码例程。本书不但详细介绍了当前流行的论题和新的变化,讨论了算法设计技巧,而且在研究算法的性能、效率以及对运行时间分析的基础上考查了一些高级数据结构,从历史的角度和近年的发展对数据结构的活跃领域进行了简要的概括。..
本书可作为高级数据结构课程或研究生一年级算法分析课程的教材。本书在教会学生良好的程序设计技巧的同时让学生具备算法分析能力,使得他们能够开发高效的程序。
译者在翻译过程中,参考了天津师范大学冯舜玺老师翻译的本书Java版的译文,而且得到冯老师的诸多帮助,使翻译工作得以尽快完成,在此深表谢意。特别感谢北京大学刘田老师,译稿成文过程中得到他的悉心审阅,提高了本书的翻译质量。我还要借此机会感谢本书的合译者吴怡,感谢她出色的翻译工作。我还想感谢人民邮电出版社图灵公司的编辑们,感谢他们为使最后的散稿成书所做的出色工作。...
张怀勇
2006年7月
前言
本书全面论述了数据结构和算法分析,即组织大量数据的方法和对算法运行时间的估计。随着计算机的速度越来越快,对于能够处理大量输入数据的程序的需求变得日益迫切。具有讽刺意味的是,由于在输入量很大时程序的效率明显降低,因此这又要求更加关注效率问题。通过在实际编程之前对算法进行分析,学生可以确定一个特定的解法是否可行。例如,在本书中学生可看到一些特定的问题,并了解精心的实现如何能够把处理大量数据的时间从16年减至不到1秒。因此,本书中论述的算法和数据结构均进行了运行时间方面的分析。在某些情况下,还研究了影响实现运行时间的一些微小细节。.
一旦确定了解法,接着就要编写程序。随着计算机功能的日益强大,它们必须解决的问题也越来越大,越来越复杂,这就要求开发更加复杂的程序。本书的目的是在教会学生使用良好的程序设计技巧的同时让学生具备算法分析能力,使得他们开发的这类程序具有最高效率。
本书适用于本科生的高级数据结构课程或是研究生的算法分析课程。使用本书的学生应该具有中等程度的程序设计方面的知识,包括指针、递归和面向对象程序设计,还要具有离散数学的某些知识。
方法
虽然本书中的内容大部分都是与语言无关的,但是,程序设计还是需要使用某种特定的语言。正如书名指出的,我们为本书选择了C++。
C++已经成为系统编程的主流语言。除了修正了许多C语言的语法方面的缺陷之外,C++还提供了直接结构(类和模板)来实现抽象数据类型的通用数据结构。
撰写本书最困难的部分是确定C++在书中所占的比例。使用太多的C++的特性将使教材变得很晦涩,使用得太少又会和使用支持类的C语言撰写的教材区别不大。
我们采用的方法是以基于对象的方法来阐述文中的内容。这样,本书中几乎没有用到继承性。我们采用类模板来描述通用数据结构。通常情况下尽量避免使用深奥的C++特性,而是使用标准C++中的vector和string类。通过采用C++的现代特性来取代在本书第1版中所用的次级特性简化了很多代码。本书前几版已经实现了类模板,方法是将类模板的接口与其实现分离开。毫无疑问,这是一种好方法,但是这种方法暴露出了编译的问题,读者事实上很难利用这些代码。本版中,在线的源代码将类模板作为一个单元来表示,而不再将接口和实现分离开。本书第1章对书中所用到的C++特性进行了介绍,并阐述了对类模板的处理方法。附录描述了如何重写类模板,用于分离编译。
以Java和C++两种语言描述的数据结构的完全版在因特网上可以得到。我们使用类似的编码习惯使得这两种语言间的相似性表现得更加明显。
第3版中的主要变化
第3版中包含了大量的错误修正,并且书中的大部分章节都经过了修订以提高其可读性。另外,本版还有以下几方面的变化:
·书中的所有代码都做了更新以适应现代的C++特性。
·第3章进行了大量的修订,并且讨论了标准vector和list类的使用及其实现。标准vector类在其他数据结构的实现中被广泛使用。
·第4章修订后包含了关于set和map类的讨论,并通过一个扩展的例子介绍了它们在有效算法设计中的应用。在第9章中也包含了一个使用标准map类来实现最短路径算法的例子。
·第7章讨论了标准sort算法,其中包括一个关于实现重载的标准sort算法所涉及的技巧。
·书中提供的源代码都已经进行了简化,从而避免了与类模板的分离编译有关的复杂语法。修订后的代码可以使读者更专心于算法本身,而不是过多地关注C++。
内容概述
第1章包含离散数学和递归的一些内容。我相信熟悉递归的唯一办法是反复不断地看一些好的用法。因此,除第5章外,递归遍布本书每一章的例子中。第1章还介绍了一些C++的内容,包括C++基础知识的回顾以及C++类设计中模板和重要结构的讨论。
第2章讨论算法分析。这一章阐述了渐近分析和它的主要弱点。这里提供了许多例子,包括对对数运行时间的深入解释。通过直观地把一些简单递归程序转变成迭代程序,对它们进行分析。这一章还介绍了更复杂的分治程序,不过有些分析(求解递归关系)要到第7章再详细进行。