算法I~IV(C++实现)——基础、数据结构、排序和搜索(第三版)
基本信息
- 原书名: Algorithms in C++ Parts 1-4Fundamentals,Data Structure,Sorting,Searching
- 原出版社: Addison Wesley/Pearson
- 作者: [美]Robert Sedgewick [作译者介绍]
- 译者: 张铭泽 赵剑云 梁勇 等
- 丛书名: 国外经典计算机科学教材
- 出版社:中国电力出版社
- ISBN:7508318080
- 上架时间:2004-6-4
- 出版日期:2004 年2月
- 开本:16开
- 页码:532
- 版次:3-1
- 所属分类:
计算机 > 计算机科学理论与基础知识 > 计算理论 > 算法
教材 > 征订教材 > 高等理工
教材 > 计算机教材 > 本科/研究生 > 计算机专业教材 > 计算机基础课程 > 算法与数学基础
教材 > 教材汇编分册 > 高等理工
本版教材征订号:0044098056-3
编辑推荐
Sedgewick在解释概念方面颇具天分,能使它们更易理解。而把真正的代码用页面大小的文字块嵌在文中,使读者容易理解它们,则是本书的另一个优势。插图、程序和表等极大丰富了读者的学习体验,这些因素使本书显得与众不同。
——William A.Ward,南阿拉巴马大学
内容简介回到顶部↑
[font color="#ff0000"]robert sedgewick[/font]完全重写了他的著作,对它进行了充分的扩展和更新,涵盖了目前重要的算法和数据结构:christopher
van wyk和sedgewick开发的新实现采用的是c++语言,这种实现不仅能简洁直接地表达算法,而且给编程者提供了实践的方法,以便在真正的应用中测试这些算法。
新的版本提供了很多新算法,而且对每个算法的解释也比以前的版本详细得多 新的版面设计以及详细、富有创意并且具有注释的插图,使本书的表达能力大大地提高了第三版保留了将理论和实践成功混合在一起的特点,正是这一点,使sedgewick的著作成为25万多名程序员无价的参考资源。
本书是全卷的前半部分,涵盖了基本的数据结构、排序算法、搜索算法以及它们的相关应用。虽然本书实质上可以用于各种语言的程序设计,christopher vanwyk和sedgewick的实现都采用了c++类和adt实现的自然对应。
本书的[font color="#ff0000"]精彩内容[/font]包括:
· 扩展了对数组、链表、字符串树及其他基本数据结构的介绍。
· 比以前的版本更加着重于抽象数据类型(adt)、模块化程序设计方法、面向对象的程序设计方法和c++类。
· 有关排序、选择、优先级队列adt实现和符号表adt(搜索)实现的算法,超过100个。
· 关于二项式队列、多路基数排序、随机化bst、发散树、跳跃表、多叉线索、8树、可扩充散列等,采用了新的实现。
· 关于算法的量化分析,是比较算法的依据。
· 1000多条新的练习,帮助读者学习算法。
无论是你初学算法,还是想找一本将最新c++经典算法和新算法融入程序设计的参考手册,你都会发现本书提供了丰富的有用信息。
新的版本提供了很多新算法,而且对每个算法的解释也比以前的版本详细得多 新的版面设计以及详细、富有创意并且具有注释的插图,使本书的表达能力大大地提高了第三版保留了将理论和实践成功混合在一起的特点,正是这一点,使sedgewick的著作成为25万多名程序员无价的参考资源。
本书是全卷的前半部分,涵盖了基本的数据结构、排序算法、搜索算法以及它们的相关应用。虽然本书实质上可以用于各种语言的程序设计,christopher vanwyk和sedgewick的实现都采用了c++类和adt实现的自然对应。
本书的[font color="#ff0000"]精彩内容[/font]包括:
· 扩展了对数组、链表、字符串树及其他基本数据结构的介绍。
· 比以前的版本更加着重于抽象数据类型(adt)、模块化程序设计方法、面向对象的程序设计方法和c++类。
· 有关排序、选择、优先级队列adt实现和符号表adt(搜索)实现的算法,超过100个。
· 关于二项式队列、多路基数排序、随机化bst、发散树、跳跃表、多叉线索、8树、可扩充散列等,采用了新的实现。
· 关于算法的量化分析,是比较算法的依据。
· 1000多条新的练习,帮助读者学习算法。
无论是你初学算法,还是想找一本将最新c++经典算法和新算法融入程序设计的参考手册,你都会发现本书提供了丰富的有用信息。
作译者回到顶部↑
本书提供作译者介绍
Robert Sedgewick 是普林斯顿大学计算机系的William O.Baker教授,也是Adobe Systems公司的主管,曾经在Xerox PARC、IDA和INRIA公司担任研究员。
Christopher J.Van Wyk 是Drew大学数学和计算机系的教授,曾在Bell实验室担任研究员,现在是那里的顾问。
Sedgewick和Van Wyk都在斯坦福大学获得了博士学位,导师同是Donald E.Knuth。
.. << 查看详细
Christopher J.Van Wyk 是Drew大学数学和计算机系的教授,曾在Bell实验室担任研究员,现在是那里的顾问。
Sedgewick和Van Wyk都在斯坦福大学获得了博士学位,导师同是Donald E.Knuth。
.. << 查看详细
目录回到顶部↑
出版说明
前 言
第一部分 基本原理
第一章 简介
1.1 算法
1.2 示例:连通问题
1.3 合并—查找算法
1.4 前景展望
1.5 总结
第二章 算法分析原理
2.1 实现和经验分析
2.2 算法分析
2.3 函数的增长
2.4 大o符号
2.5 递归基础知识
2.6 算法分析举例
2.7 保证、预测和限制
第一部分 参考资料
第二部分 数据结构
第三章 基本数据结构
前 言
第一部分 基本原理
第一章 简介
1.1 算法
1.2 示例:连通问题
1.3 合并—查找算法
1.4 前景展望
1.5 总结
第二章 算法分析原理
2.1 实现和经验分析
2.2 算法分析
2.3 函数的增长
2.4 大o符号
2.5 递归基础知识
2.6 算法分析举例
2.7 保证、预测和限制
第一部分 参考资料
第二部分 数据结构
第三章 基本数据结构
前言回到顶部↑
写作本书的意图是纵览当今所使用的最重要的计算机算法,并为越来越多需要了解这方面知识的读者讲解基础的技术。本书可以在学生掌握了基本的程序设计技能,熟悉了计算机系统,但是还没有学习过计算机科学或计算机应用的高级领域的专门课程时,作为计算机科学的第二、第三或第四门课程的教科书。此外,由于本书包含了大量有用算法的实现和关于其性能特征的详细信息,所以它还适用于自学,或作为那些从事计算机系统或应用程序开发的人员的参考手册。宽广的视角使本书成为了计算机算法领域最合适的入门读物。
对于这新的一版,我不仅完全重写了它的内容,而且还添加了一千多个练习、一百多幅图和许多程序,此外还给所有的图和程序都添加了详细的注释。新的素材涵盖了两个方面的内容——新的主题和对许多经典算法的更完整的解释。抽象数据类型是这本书的新重点,这个新重点使程序的应用更广泛,并且与现代程序设计环境的关系更紧密。读过本书旧版本的人一定会发现,新版本包含了更为丰富的新信息。所有读者都能感到大量的教学性资料为掌握基本概念提供了有效的途径。
由于新的素材数量过多,所以我们把新版本分成了两卷(每一卷的容量大约都相当于旧的版本),本书就是第一卷。这一卷包括基本概念、数据结构、排序算法和搜索算法;第二卷涵盖的高级算法和应用程序是以第一卷介绍的基本抽象概念和方法为基础的。在这一版中,几乎所有关于基本原理和数据结构的素材都是新的。
这本书不仅仅是为程序设计人员和计算机科学系的学生而编写的,凡是想使计算机运行得更快,或想用它解决更多问题的人都可以使用这本书。本书中的算法代表了过去50多年所研究的知识的主体,对于形形色色的应用程序来说,它们已经成为有效使用计算机所不可缺少的。从物理学中的N体仿真到分子生物学中的基因序列问题,这些基础算法已成为科学研究的要素;从数据库系统到Internet搜索引擎,它们已经成为现代软件系统的实质。随着计算机应用领域的不断扩大,本书介绍的大量基础算法的效用也在逐渐增长。本书的目标就是成为学生和那些想了解基础算法并且能够灵活地运用这些算法作为基本工具来处理任意计算机应用程序的专业人士的资源。
范围
本书共有十六章,分为四大部分:基本原理、数据结构、排序算法和搜索算法。这里的说明是想让读者对尽可能多的基础算法的基本特性有一个了解。本书介绍的算法已经经过多年的广泛应用,代表了程序员和计算机科学系学生掌握的知识的主体。从二项式队列到帕氏线索算法这个范围内的有创见的方法都与计算机科学核心的基础范例相关。第二卷由另外四部分构成,它们分别为字符串处理算法、几何算法、图形算法和高级主题。我写这本书的主要意图是将各个领域应用的基础方法集合起来,从而提供用计算机解决基本问题的最好方法。
如果你已经学习过一两门计算机科学的初级课程(如C抖、Java或C等高级语言的程序设计课程,可能还有讲解程序设计系统的基础概念的课程)或者具有同等的程序设计经验,那么一定会非常欣赏本书提供的资料。因此,本书是为每个熟悉现代程序设计语言和现代计算机系统的基本特性的人而编写的。书中所建议的参考文献有助于你弥补背景知识的不足。
由于用来支持分析结果的大部分数学知识都来源于本书之内(或者被标记为不在本书范围之内),所以尽管具有完备的数学知识无疑会有很大帮助,但是专门的数学准备却不是必需的。
课程中的用法
如何教授本书的内容具有极大的灵活性,这是由教师的经验和学生的知识储备决定的。这里有充足的基础内容用来教授初学者数据结构,也有充足的高级主题来教授高年级学生算法设计与分析。有些教师可能想着重于实现和实践方面的内容,有些教师则可能想着重于分析和理论概念方面的内容。
我为这本书的使用设计了多种课程学习资料,其中包括讲稿用的幻灯片、程序设计作业、家庭作业以及示例测验和交互式练习。访问本书的主页http://www.awl.com/cseng/titles/O-201—35088-2可以得到这些资料。
关于数据结构和算法的基础课程可能会着重于第二部分中的基本数据结构和它们在第三、四部分中的实现中的使用。关于算法设计和分析的课程可能会着重于第一部分和第五章中的基础内容,然后研究第三、四部分中的算法如何达到良好的渐近性能的方法。关于软件工程的课程可能会省略数学和高级算法部分的内容,而着重于如何把这里给出的算法实现集成到大的应用程序或系统中。关于算法的课程则可能采用通盘考虑的方法并介绍所有领域内的概念。
本书的早期版本近年来被全世界各大学院和大学用作计算机科学的第二或第三门课程的教材或其他课程的补充性阅读材料。在普林斯顿大学,我们的经验是这本书内容广泛,为专业学生提供了计算机科学的引论,此后有关算法分析、系统程序设计和理论性计算机科学的课程都可以对它进行扩展,此外它还给其他学科的学生提供了一整套方法,他们可以立刻将这些方法很好地利用起来。
本书中的练习(大部分是这一版新添的)分为几种类型。有些专用于测试对文中内容的理解程度,只要求读者完成一个练习或应用文中介绍的概念。有些则涉及到算法的实现和结合,或者根据学习经验比较各种算法来学习它们的特性。还有一些则是重要内容的深入探讨,这些内容不适于放在正文中。仔细阅读和思考这些练习会使每个读者受益匪浅。
实际应用的算法
任何想更加有效地使用计算机的人都可以把这本书作为参考手册或自学材料。具有程序设计经验的人可以在这本书中找到许多专业主题的内容。对于更大范围内的读者,则可以阅读个别独立的章节,尽管有时某一章中的算法会用到前一章中介绍的方法。
本书的定位是研究有可能实际用到的算法。它提供的专业工具信息很中肯,读者可以放心地实现、调试和试验算法,来解决问题或在应用程序中提供功能性。本书中讨论的算法都有完整的实现,而且在一系列连贯的示例中还有关于操作这些应用程序的描述。
由于我们使用的是真正的代码,而不是伪代码,所以你可以便捷地将它们应用到实际当中。访问本书的主页可以得到各个程序的清单。你可以以多种方式利用这些有指导意义的程序来研究算法。阅读这些代码可以检测你对算法细节的理解程度,或者弄明白初始化、边界条件处理和其他常常给程序设计带来挑战的问题的解决方法。还可以试着运行一下代码来查看运行中的算法,根据经验研究它们的性能,并将你得到的结果与书中的表进行对照,或者尝试着对它们进行一些修改。
在适当的时候,书中会列出经验数据和分析结果以说明为什么选择某些算法。当要引起注意时,它会描述实际应用的算法和纯理论的结果之间的关系。尽管没有强调算法分析和理论计算机科学之间的联系,但是上下文中仍然对它们进行了说明。有关算法和实现的性能特征被综合在一起,进行了概括,在本书中随处可见。
程序设计语言
对于这新的一版,我不仅完全重写了它的内容,而且还添加了一千多个练习、一百多幅图和许多程序,此外还给所有的图和程序都添加了详细的注释。新的素材涵盖了两个方面的内容——新的主题和对许多经典算法的更完整的解释。抽象数据类型是这本书的新重点,这个新重点使程序的应用更广泛,并且与现代程序设计环境的关系更紧密。读过本书旧版本的人一定会发现,新版本包含了更为丰富的新信息。所有读者都能感到大量的教学性资料为掌握基本概念提供了有效的途径。
由于新的素材数量过多,所以我们把新版本分成了两卷(每一卷的容量大约都相当于旧的版本),本书就是第一卷。这一卷包括基本概念、数据结构、排序算法和搜索算法;第二卷涵盖的高级算法和应用程序是以第一卷介绍的基本抽象概念和方法为基础的。在这一版中,几乎所有关于基本原理和数据结构的素材都是新的。
这本书不仅仅是为程序设计人员和计算机科学系的学生而编写的,凡是想使计算机运行得更快,或想用它解决更多问题的人都可以使用这本书。本书中的算法代表了过去50多年所研究的知识的主体,对于形形色色的应用程序来说,它们已经成为有效使用计算机所不可缺少的。从物理学中的N体仿真到分子生物学中的基因序列问题,这些基础算法已成为科学研究的要素;从数据库系统到Internet搜索引擎,它们已经成为现代软件系统的实质。随着计算机应用领域的不断扩大,本书介绍的大量基础算法的效用也在逐渐增长。本书的目标就是成为学生和那些想了解基础算法并且能够灵活地运用这些算法作为基本工具来处理任意计算机应用程序的专业人士的资源。
范围
本书共有十六章,分为四大部分:基本原理、数据结构、排序算法和搜索算法。这里的说明是想让读者对尽可能多的基础算法的基本特性有一个了解。本书介绍的算法已经经过多年的广泛应用,代表了程序员和计算机科学系学生掌握的知识的主体。从二项式队列到帕氏线索算法这个范围内的有创见的方法都与计算机科学核心的基础范例相关。第二卷由另外四部分构成,它们分别为字符串处理算法、几何算法、图形算法和高级主题。我写这本书的主要意图是将各个领域应用的基础方法集合起来,从而提供用计算机解决基本问题的最好方法。
如果你已经学习过一两门计算机科学的初级课程(如C抖、Java或C等高级语言的程序设计课程,可能还有讲解程序设计系统的基础概念的课程)或者具有同等的程序设计经验,那么一定会非常欣赏本书提供的资料。因此,本书是为每个熟悉现代程序设计语言和现代计算机系统的基本特性的人而编写的。书中所建议的参考文献有助于你弥补背景知识的不足。
由于用来支持分析结果的大部分数学知识都来源于本书之内(或者被标记为不在本书范围之内),所以尽管具有完备的数学知识无疑会有很大帮助,但是专门的数学准备却不是必需的。
课程中的用法
如何教授本书的内容具有极大的灵活性,这是由教师的经验和学生的知识储备决定的。这里有充足的基础内容用来教授初学者数据结构,也有充足的高级主题来教授高年级学生算法设计与分析。有些教师可能想着重于实现和实践方面的内容,有些教师则可能想着重于分析和理论概念方面的内容。
我为这本书的使用设计了多种课程学习资料,其中包括讲稿用的幻灯片、程序设计作业、家庭作业以及示例测验和交互式练习。访问本书的主页http://www.awl.com/cseng/titles/O-201—35088-2可以得到这些资料。
关于数据结构和算法的基础课程可能会着重于第二部分中的基本数据结构和它们在第三、四部分中的实现中的使用。关于算法设计和分析的课程可能会着重于第一部分和第五章中的基础内容,然后研究第三、四部分中的算法如何达到良好的渐近性能的方法。关于软件工程的课程可能会省略数学和高级算法部分的内容,而着重于如何把这里给出的算法实现集成到大的应用程序或系统中。关于算法的课程则可能采用通盘考虑的方法并介绍所有领域内的概念。
本书的早期版本近年来被全世界各大学院和大学用作计算机科学的第二或第三门课程的教材或其他课程的补充性阅读材料。在普林斯顿大学,我们的经验是这本书内容广泛,为专业学生提供了计算机科学的引论,此后有关算法分析、系统程序设计和理论性计算机科学的课程都可以对它进行扩展,此外它还给其他学科的学生提供了一整套方法,他们可以立刻将这些方法很好地利用起来。
本书中的练习(大部分是这一版新添的)分为几种类型。有些专用于测试对文中内容的理解程度,只要求读者完成一个练习或应用文中介绍的概念。有些则涉及到算法的实现和结合,或者根据学习经验比较各种算法来学习它们的特性。还有一些则是重要内容的深入探讨,这些内容不适于放在正文中。仔细阅读和思考这些练习会使每个读者受益匪浅。
实际应用的算法
任何想更加有效地使用计算机的人都可以把这本书作为参考手册或自学材料。具有程序设计经验的人可以在这本书中找到许多专业主题的内容。对于更大范围内的读者,则可以阅读个别独立的章节,尽管有时某一章中的算法会用到前一章中介绍的方法。
本书的定位是研究有可能实际用到的算法。它提供的专业工具信息很中肯,读者可以放心地实现、调试和试验算法,来解决问题或在应用程序中提供功能性。本书中讨论的算法都有完整的实现,而且在一系列连贯的示例中还有关于操作这些应用程序的描述。
由于我们使用的是真正的代码,而不是伪代码,所以你可以便捷地将它们应用到实际当中。访问本书的主页可以得到各个程序的清单。你可以以多种方式利用这些有指导意义的程序来研究算法。阅读这些代码可以检测你对算法细节的理解程度,或者弄明白初始化、边界条件处理和其他常常给程序设计带来挑战的问题的解决方法。还可以试着运行一下代码来查看运行中的算法,根据经验研究它们的性能,并将你得到的结果与书中的表进行对照,或者尝试着对它们进行一些修改。
在适当的时候,书中会列出经验数据和分析结果以说明为什么选择某些算法。当要引起注意时,它会描述实际应用的算法和纯理论的结果之间的关系。尽管没有强调算法分析和理论计算机科学之间的联系,但是上下文中仍然对它们进行了说明。有关算法和实现的性能特征被综合在一起,进行了概括,在本书中随处可见。
程序设计语言








点击看大图






加载中...

