算法:C语言实现 (第1-4部分)基础知识、数据结构……
查看书籍详细信息:
编辑推荐
本书是Sedgewick彻底修订和重写的C算法系列的第一本。全书分为四部分,共16章。第一部分“基础知识”(第1—2章)介绍基本算法分析原理。第二部分“数据结构”
(第3~5章)讲解算法分析中必须掌握的数据结构知识,主要包括基本数据结构、抽象数据结构、递归和树。第三部分“排序”
(第6~11章)按章节顺序分别讨论基本排序方法(如选择排序、插入排序、冒泡排序、希尔排序等)、快速排序方法、归并和归并排序方法、优先队列与堆排序方法、基数排序方法以及特殊用途的排序方法,并比较了各种排序方法的性能特征。第四部分“搜索”(第12~16章)在进一步讲解符号表、树等抽象数据类型的基础上,重点讨论散列方法、基数搜索以及外部搜索方法。
书中提供了用C语言描述的完整算法源程序,并且配有丰富的插图和练习。作者用简洁的实现将理论和实践成功地结合了起来,这些实现均可在真实应用上测试,使得本书自问世以来备受程序员的欢迎。
本书可作为高等院校计算机相关专业算法与数据结构课程的教材和补充读物,也可供自学之用。
更多经典图书
《算法导论(原书第2版)》点击进入
内容简介
本书细腻讲解计算机算法的C语言实现。全书分为四部分,共16章。包括基本算法分析原理,基本数据结构、抽象数据结构、递归和树等数据结构知识,选择排序、插入排序、冒泡排序、希尔排序、快速排序方法、归并和归并排序方法、优先队列与堆排序方法、基数排序方法以及特殊用途的排序方法,并比较了各种排序方法的性能特征,在进一步讲解符号表、树等抽象数据类型的基础上,重点讨论散列方法、基数搜索以及外部搜索方法。书中提供了用C语言描述的完整算法源程序,并且配有丰富的插图和练习,还包含大量简洁的实现将理论和实践成功地相结合,这些实现均可用在真实应用上。
本书内容丰富,具有很强的实用价值,适合作为高等院校计算机及相关专业本科生算法课程的教材,也是广大研究人员的极佳参考读物。
作者简介
塞奇威克(Robert Sedgewick),拥有斯坦福大学博士学位(导师为donald E.Knuth),普林斯顿大学计算机科学系教授,Adobe Systems公司董事,曾是Xerox PARC的研究人员,还曾就职于美国国防防御分析研究所以及INRIA。除本书外,他还与Philippe Flajolet合著了《算法分析导论》
目录
出版者的话
译者序
前言
第一部分 基础知识
第1章 引言
1.1 算法
1.2 典型问题——连通性
1.3 合并一查找算法
1.4 展望
1.5 主题概述
第2章 算法分析的原理
2.1 实现和经验分析
2.2 算法分析
2.3 函数的增长
2.4 大O符号
2.5 基本递归方程
2.6 算法分析示例
2.7 保证、预测及局限性
第二部分 数据结构
第3章 基本数据结构
3.1 构建组件
3.2 数组
3.3 链表
3.4 链表的基本处理操作
3.5 链表的内存分配
3.6 字符串
3.7 复合数据结构
第4章 抽象数据类型
4.1 抽象对象和对象集
4.2 下推栈ADT
4.3 栈ADT客户示例
4.4 栈ADT的实现
4.5 创建一个新ADT
4.6 FIFO队列和广义队列
4.7 复制和索引项
4.8 一级ADT
4.9 基于应用的ADT示例
4.10 展望
第5章 递归与树
5.1 递归算法
5.2 分治法
5.3 动态规划
5.4 树
5.5 树的数学性质
5.6 树的遍历
5.7 递归二叉树算法
5.8 图的遍历
5.9 综述
第三部分 排序
第6章 基本排序方法
6.1 游戏规则
6.2 选择排序
6.3 插入排序
6.4 冒泡排序
6.5 基本排序方法的性能特征
6.6 希尔排序
6.7 对其他类型的数据进行排序
6.8 索引和指针排序
6.9 链表排序
6.10 关键字索引统计
第7章 快速排序
7.1 基本算法
7.2 快速排序算法的性能特征
7.3 栈大小
7.4 小的子文件
7.5 三者取中划分
7.6 重复关键字
7.7 字符串和向量
……
第8章 归并与归并排序
第9章 优先队列和堆排序
第10章 基数排序
第11章 特殊用途的排序方法
第四部分 搜索
第12章 符号表和二叉搜索树
第13章 平衡树
第14章 散列
第15章 基数搜索
第16章 外部搜索
媒体评论
对于在数学分析方面不算熟练且需要留意理论算法的普通程序员来说,本书是一本可读性很强的优秀读本。他们应该会从中获益良多。 ——Steve Summit,《C Programming FAQs》的作者 Sedgewick有一种真正的天赋,可以用易于理解的方式来
在线试读部分章节
第一部分 基础知识
第2章 算法分析的原理
要把算法高效应用到实际问题中,分析是充分理解算法的关键。尽管不能对运行的每个程序进行广泛的实验和深入的数学分析,我们还是能够在一个基本框架内进行实验测试和近似分析,这样可以帮助我们了解关于算法性能特征的重要事实,从而对算法进行比较,才可以把它们应用到实际问题中。
精确地用数学分析的方法描述复杂算法的性能的这个想法,乍看起来有点使人畏惧,并且经常需要查阅一些有详细数学研究结果的研究文献。尽管本书目的不是包含一些分析方法,甚至总结这些结果,但重要的是一开始就意识到我们是在坚实的数学基础上比较不同的算法。此外,通过运用相对少量的基本技术,就能获得许多最重要算法的大量详细信息。书中强调基本分析结果和分析方法,尤其是当这样的理解有助于理解基本算法的内在工作机理时。本章的主要目标是为高效使用算法提供所需的上下文和工具。
第1章给出的例子提供了说明算法分析基本概念的上下文,因而我们会经常回到合并-查找算法讨论某个具体的概念。我们在2.6节还将讨论一些新的例子。
在设计和实现算法的过程中分析起着一定的作用。首先,正如看到的那样,选择合适的算法会节省数千乃至数百万倍的时间。随着讨论更多的高效算法,我们发现在这些算法中进行选择更具有挑战性,因而需要更仔细研究算法的性质。在寻求最佳(某种精确技术意义下)算法中,我们寻求既实用又在理论上具有挑战性的算法。
……