作者:
迈克尔.·T·古德里奇
/
罗伯托·塔玛西亚
/
迈克尔·H·戈德瓦瑟
出版社: 机械工业出版社
副标题: Python语言实现
原作名: Data Structures and Algorithms in Python
译者: 张晓 / 赵晓南
出版年: 2018-9
页数: 477
定价: 109.00元
装帧: 平装
ISBN: 9787111606604
出版社: 机械工业出版社
副标题: Python语言实现
原作名: Data Structures and Algorithms in Python
译者: 张晓 / 赵晓南
出版年: 2018-9
页数: 477
定价: 109.00元
装帧: 平装
ISBN: 9787111606604
内容简介 · · · · · ·
本书采用Python语言讨论数据结构和算法,详细讲解其设计、分析与实现过程,是一本内容全面且特色鲜明的教材。书中将面向对象视角贯穿始终,充分利用Python语言优美而简洁的特点,强调代码的健壮性和可重用性,关注各种抽象数据类型以及不同算法实现策略的权衡。
目录 · · · · · ·
出版者的话
译者序
前言
致谢
作者简介
第1章 Python入门
1.1 Python概述
1.1.1 Python解释器
1.1.2 Python程序预览
1.2 Python对象
1.2.1 标识符、对象和赋值语句
1.2.2 创建和使用对象
1.2.3 Python的内置类
1.3 表达式、运算符和优先级
1.4 控制流程
1.4.1 条件语句
1.4.2 循环语句
1.5 函数
1.5.1 信息传递
1.5.2 Python的内置函数
1.6 简单的输入和输出
1.6.1 控制台输入和输出
1.6.2 文件
1.7 异常处理
1.7.1 抛出异常
1.7.2 捕捉异常
1.8 迭代器和生成器
1.9 Python的其他便利特点
1.9.1 条件表达式
1.9.2 解析语法
1.9.3 序列类型的打包和解包
1.10 作用域和命名空间
1.11 模块和import语句
1.12 练习
扩展阅读
第2章 面向对象编程
2.1 目标、原则和模式
2.1.1 面向对象的设计目标
2.1.2 面向对象的设计原则
2.1.3 设计模式
2.2 软件开发
2.2.1 设计
2.2.2 伪代码
2.2.3 编码风格和文档
2.2.4 测试和调试
2.3 类定义
2.3.1 例子:CreditCard类
2.3.2 运算符重载和Python的特殊方法
2.3.3 例子:多维向量类
2.3.4 迭代器
2.3.5 例子:Range类
2.4 继承
2.4.1 扩展CreditCard类
2.4.2 数列的层次图
2.4.3 抽象基类
2.5 命名空间和面向对象
2.5.1 实例和类命名空间
2.5.2 名称解析和动态调度
2.6 深拷贝和浅拷贝
2.7 练习
扩展阅读
第3章 算法分析
3.1 实验研究
3.2 本书使用的7种函数
3.2.1 常数函数
3.2.2 对数函数
3.2.3 线性函数
3.2.4 n log n函数
3.2.5 二次函数
3.2.6 三次函数和其他多项式
3.2.7 指数函数
3.2.8 比较增长率
3.3 渐近分析
3.3.1 大O符号
3.3.2 比较分析
3.3.3 算法分析示例
3.4 简单的证明技术
3.4.1 示例
3.4.2 反证法
3.4.3 归纳和循环不变量
3.5 练习
扩展阅读
第4章 递归
4.1 说明性的例子
4.1.1 阶乘函数
4.1.2 绘制英式标尺
4.1.3 二分查找
4.1.4 文件系统
4.2 分析递归算法
4.3 递归算法的不足
4.4 递归的其他例子
4.4.1 线性递归
4.4.2 二路递归
4.4.3 多重递归
4.5 设计递归算法
4.6 消除尾递归
4.7 练习
扩展阅读
第5章 基于数组的序列
5.1 Python序列类型
5.2 低层次数组
5.2.1 引用数组
5.2.2 Python中的紧凑数组
5.3 动态数组和摊销
5.3.1 实现动态数组
5.3.2 动态数组的摊销分析
5.3.3 Python列表类
5.4 Python序列类型的效率
5.4.1 Python的列表和元组类
5.4.2 Python的字符串类
5.5 使用基于数组的序列
5.5.1 为游戏存储高分
5.5.2 为序列排序
5.5.3 简单密码技术
5.6 多维数据集
5.7 练习
扩展阅读
第6章 栈、队列和双端队列
6.1 栈
6.1.1 栈的抽象数据类型
6.1.2 简单的基于数组的栈实现
6.1.3 使用栈实现数据的逆置
6.1.4 括号和HTML标记匹配
6.2 队列
6.2.1 队列的抽象数据类型
6.2.2 基于数组的队列实现
6.3 双端队列
6.3.1 双端队列的抽象数据类型
6.3.2 使用环形数组实现双端队列
6.3.3 Python collections模块中的双端队列
6.4 练习
扩展阅读
第7章 链表
7.1 单向链表
7.1.1 用单向链表实现栈
7.1.2 用单向链表实现队列
7.2 循环链表
7.2.1 轮转调度
7.2.2 用循环链表实现队列
7.3 双向链表
7.3.1 双向链表的基本实现
7.3.2 用双向链表实现双端队列
7.4 位置列表的抽象数据类型
7.4.1 含位置信息的列表抽象数据类型
7.4.2 双向链表实现
7.5 位置列表的排序
7.6 案例研究:维护访问频率
7.6.1 使用有序表
7.6.2 启发式动态调整列表
7.7 基于链接的序列与基于数组的序列
7.8 练习
扩展阅读
第8章 树
8.1 树的基本概念
8.1.1 树的定义和属性
8.1.2 树的抽象数据类型
8.1.3 计算深度和高度
8.2 二叉树
8.2.1 二叉树的抽象数据类型
8.2.2 二叉树的属性
8.3 树的实现
8.3.1 二叉树的链式存储结构
8.3.2 基于数组表示的二叉树
8.3.3 一般树的链式存储结构
8.4 树的遍历算法
8.4.1 树的先序和后序遍历
8.4.2 树的广度优先遍历
8.4.3 二叉树的中序遍历
8.4.4 用Python实现树遍历
8.4.5 树遍历的应用
8.4.6 欧拉图和模板方法模式*
8.5 案例研究:表达式树
8.6 练习
扩展阅读
第9章 优先级队列
9.1 优先级队列的抽象数据类型
9.1.1 优先级
9.1.2 优先级队列的抽象数据类型的实现
9.2 优先级队列的实现
9.2.1 组合设计模式
9.2.2 使用未排序列表实现优先级队列
9.2.3 使用排序列表实现优先级队列
9.3 堆
9.3.1 堆的数据结构
9.3.2 使用堆实现优先级队列
9.3.3 基于数组的完全二叉树表示
9.3.4 Python的堆实现
9.3.5 基于堆的优先级队列的分析
9.3.6 自底向上构建堆*
9.3.7 Python的heapq模块
9.4 使用优先级队列排序
9.4.1 选择排序和插入排序
9.4.2 堆排序
9.5 适应性优先级队列
9.5.1 定位器
9.5.2 适应性优先级队列的实现
9.6 练习
扩展阅读
第10章 映射、哈希表和跳跃表
10.1 映射和字典
10.1.1 映射的抽象数据类型
10.1.2 应用:单词频率统计
10.1.3 Python的MutableMapping抽象基类
10.1.4 我们的MapBase类
10.1.5 简单的非有序映射实现
10.2 哈希表
10.2.1 哈希函数
10.2.2 哈希码
10.2.3 压缩函数
10.2.4 冲突处理方案
10.2.5 负载因子、重新哈希和效率
10.2.6 Python哈希表的实现
10.3 有序映射
10.3.1 排序检索表
10.3.2 有序映射的两种应用
10.4 跳跃表
10.4.1 跳跃表中的查找和更新操作
10.4.2 跳跃表的概率分析*
10.5 集合、多集和多映射
10.5.1 集合的抽象数据类型
10.5.2 Python的MutableSet抽象基类
10.5.3 集合、多集和多映射的实现
10.6 练习
扩展阅读
第11章 搜索树
11.1 二叉搜索树
11.1.1 遍历二叉搜索树
11.1.2 搜索
11.1.3 插入和删除
11.1.4 Python实现
11.1.5 二叉搜索树的性能
11.2 平衡搜索树
11.3 AVL树
11.3.1 更新操作
11.3.2 Python实现
11.4 伸展树
11.4.1 伸展
11.4.2 何时进行伸展
11.4.3 Python实现
11.4.4 伸展树的摊销分析*
11.5 (2,4)树
11.5.1 多路搜索树
11.5.2 (2,4)树的操作
11.6 红黑树
11.6.1 红黑树的操作
11.6.2 Python实现
11.7 练习
扩展阅读
第12章 排序与选择
12.1 为什么要学习排序算法
12.2 归并排序
12.2.1 分治法
12.2.2 基于数组的归并排序的实现
12.2.3 归并排序的运行时间
12.2.4 归并排序与递归方程*
12.2.5 归并排序的可选实现
12.3 快速排序
12.3.1 随机快速排序
12.3.2 快速排序的额外优化
12.4 再论排序:算法视角
12.4.1 排序下界
12.4.2 线性时间排序:桶排序和基数排序
12.5 排序算法的比较
12.6 Python的内置排序函数
12.7 选择
12.7.1 剪枝搜索
12.7.2 随机快速选择
12.7.3 随机快速选择分析
12.8 练习
扩展阅读
第13章 文本处理
13.1 数字化文本的多样性
13.2 模式匹配算法
13.2.1 穷举
13.2.2 Boyer-Moore算法
13.2.3 Knuth-Morris-Pratt算法
13.3 动态规划
13.3.1 矩阵链乘积
13.3.2 DNA和文本序列比对
13.4 文本压缩和贪心算法
13.4.1 霍夫曼编码算法
13.4.2 贪心算法
13.5 字典树
13.5.1 标准字典树
13.5.2 压缩字典树
13.5.3 后缀字典树
13.5.4 搜索引擎索引
13.6 练习
拓展阅读
第14章 图算法
14.1 图
14.2 图的数据结构
14.2.1 边列表结构
14.2.2 邻接列表结构
14.2.3 邻接图结构
14.2.4 邻接矩阵结构
14.2.5 Python实现
14.3 图遍历
14.3.1 深度优先搜索
14.3.2 深度优先搜索的实现和扩展
14.3.3 广度优先搜索
14.4 传递闭包
14.5 有向非循环图
14.6 最短路径
14.6.1 加权图
14.6.2 Dijkstra算法
14.7 最小生成树
14.7.1 Prim-Jarník算法
14.7.2 Kruskal算法
14.7.3 不相交分区和联合查找结构
14.8 练习
扩展阅读
第15章 内存管理和B树
15.1 内存管理
15.1.1 内存分配
15.1.2 垃圾回收
15.1.3 Python解释器使用的额外内存
15.2 存储器层次结构和缓存
15.2.1 存储器系统
15.2.2 高速缓存策略
15.3 外部搜索和B树
15.3.1 (a,b)树
15.3.2 B树
15.4 外部存储器中的排序
15.5 练习
拓展阅读
附录A Python中的字符串
附录B 有用的数学定理
参考文献
· · · · · · (收起)
译者序
前言
致谢
作者简介
第1章 Python入门
1.1 Python概述
1.1.1 Python解释器
1.1.2 Python程序预览
1.2 Python对象
1.2.1 标识符、对象和赋值语句
1.2.2 创建和使用对象
1.2.3 Python的内置类
1.3 表达式、运算符和优先级
1.4 控制流程
1.4.1 条件语句
1.4.2 循环语句
1.5 函数
1.5.1 信息传递
1.5.2 Python的内置函数
1.6 简单的输入和输出
1.6.1 控制台输入和输出
1.6.2 文件
1.7 异常处理
1.7.1 抛出异常
1.7.2 捕捉异常
1.8 迭代器和生成器
1.9 Python的其他便利特点
1.9.1 条件表达式
1.9.2 解析语法
1.9.3 序列类型的打包和解包
1.10 作用域和命名空间
1.11 模块和import语句
1.12 练习
扩展阅读
第2章 面向对象编程
2.1 目标、原则和模式
2.1.1 面向对象的设计目标
2.1.2 面向对象的设计原则
2.1.3 设计模式
2.2 软件开发
2.2.1 设计
2.2.2 伪代码
2.2.3 编码风格和文档
2.2.4 测试和调试
2.3 类定义
2.3.1 例子:CreditCard类
2.3.2 运算符重载和Python的特殊方法
2.3.3 例子:多维向量类
2.3.4 迭代器
2.3.5 例子:Range类
2.4 继承
2.4.1 扩展CreditCard类
2.4.2 数列的层次图
2.4.3 抽象基类
2.5 命名空间和面向对象
2.5.1 实例和类命名空间
2.5.2 名称解析和动态调度
2.6 深拷贝和浅拷贝
2.7 练习
扩展阅读
第3章 算法分析
3.1 实验研究
3.2 本书使用的7种函数
3.2.1 常数函数
3.2.2 对数函数
3.2.3 线性函数
3.2.4 n log n函数
3.2.5 二次函数
3.2.6 三次函数和其他多项式
3.2.7 指数函数
3.2.8 比较增长率
3.3 渐近分析
3.3.1 大O符号
3.3.2 比较分析
3.3.3 算法分析示例
3.4 简单的证明技术
3.4.1 示例
3.4.2 反证法
3.4.3 归纳和循环不变量
3.5 练习
扩展阅读
第4章 递归
4.1 说明性的例子
4.1.1 阶乘函数
4.1.2 绘制英式标尺
4.1.3 二分查找
4.1.4 文件系统
4.2 分析递归算法
4.3 递归算法的不足
4.4 递归的其他例子
4.4.1 线性递归
4.4.2 二路递归
4.4.3 多重递归
4.5 设计递归算法
4.6 消除尾递归
4.7 练习
扩展阅读
第5章 基于数组的序列
5.1 Python序列类型
5.2 低层次数组
5.2.1 引用数组
5.2.2 Python中的紧凑数组
5.3 动态数组和摊销
5.3.1 实现动态数组
5.3.2 动态数组的摊销分析
5.3.3 Python列表类
5.4 Python序列类型的效率
5.4.1 Python的列表和元组类
5.4.2 Python的字符串类
5.5 使用基于数组的序列
5.5.1 为游戏存储高分
5.5.2 为序列排序
5.5.3 简单密码技术
5.6 多维数据集
5.7 练习
扩展阅读
第6章 栈、队列和双端队列
6.1 栈
6.1.1 栈的抽象数据类型
6.1.2 简单的基于数组的栈实现
6.1.3 使用栈实现数据的逆置
6.1.4 括号和HTML标记匹配
6.2 队列
6.2.1 队列的抽象数据类型
6.2.2 基于数组的队列实现
6.3 双端队列
6.3.1 双端队列的抽象数据类型
6.3.2 使用环形数组实现双端队列
6.3.3 Python collections模块中的双端队列
6.4 练习
扩展阅读
第7章 链表
7.1 单向链表
7.1.1 用单向链表实现栈
7.1.2 用单向链表实现队列
7.2 循环链表
7.2.1 轮转调度
7.2.2 用循环链表实现队列
7.3 双向链表
7.3.1 双向链表的基本实现
7.3.2 用双向链表实现双端队列
7.4 位置列表的抽象数据类型
7.4.1 含位置信息的列表抽象数据类型
7.4.2 双向链表实现
7.5 位置列表的排序
7.6 案例研究:维护访问频率
7.6.1 使用有序表
7.6.2 启发式动态调整列表
7.7 基于链接的序列与基于数组的序列
7.8 练习
扩展阅读
第8章 树
8.1 树的基本概念
8.1.1 树的定义和属性
8.1.2 树的抽象数据类型
8.1.3 计算深度和高度
8.2 二叉树
8.2.1 二叉树的抽象数据类型
8.2.2 二叉树的属性
8.3 树的实现
8.3.1 二叉树的链式存储结构
8.3.2 基于数组表示的二叉树
8.3.3 一般树的链式存储结构
8.4 树的遍历算法
8.4.1 树的先序和后序遍历
8.4.2 树的广度优先遍历
8.4.3 二叉树的中序遍历
8.4.4 用Python实现树遍历
8.4.5 树遍历的应用
8.4.6 欧拉图和模板方法模式*
8.5 案例研究:表达式树
8.6 练习
扩展阅读
第9章 优先级队列
9.1 优先级队列的抽象数据类型
9.1.1 优先级
9.1.2 优先级队列的抽象数据类型的实现
9.2 优先级队列的实现
9.2.1 组合设计模式
9.2.2 使用未排序列表实现优先级队列
9.2.3 使用排序列表实现优先级队列
9.3 堆
9.3.1 堆的数据结构
9.3.2 使用堆实现优先级队列
9.3.3 基于数组的完全二叉树表示
9.3.4 Python的堆实现
9.3.5 基于堆的优先级队列的分析
9.3.6 自底向上构建堆*
9.3.7 Python的heapq模块
9.4 使用优先级队列排序
9.4.1 选择排序和插入排序
9.4.2 堆排序
9.5 适应性优先级队列
9.5.1 定位器
9.5.2 适应性优先级队列的实现
9.6 练习
扩展阅读
第10章 映射、哈希表和跳跃表
10.1 映射和字典
10.1.1 映射的抽象数据类型
10.1.2 应用:单词频率统计
10.1.3 Python的MutableMapping抽象基类
10.1.4 我们的MapBase类
10.1.5 简单的非有序映射实现
10.2 哈希表
10.2.1 哈希函数
10.2.2 哈希码
10.2.3 压缩函数
10.2.4 冲突处理方案
10.2.5 负载因子、重新哈希和效率
10.2.6 Python哈希表的实现
10.3 有序映射
10.3.1 排序检索表
10.3.2 有序映射的两种应用
10.4 跳跃表
10.4.1 跳跃表中的查找和更新操作
10.4.2 跳跃表的概率分析*
10.5 集合、多集和多映射
10.5.1 集合的抽象数据类型
10.5.2 Python的MutableSet抽象基类
10.5.3 集合、多集和多映射的实现
10.6 练习
扩展阅读
第11章 搜索树
11.1 二叉搜索树
11.1.1 遍历二叉搜索树
11.1.2 搜索
11.1.3 插入和删除
11.1.4 Python实现
11.1.5 二叉搜索树的性能
11.2 平衡搜索树
11.3 AVL树
11.3.1 更新操作
11.3.2 Python实现
11.4 伸展树
11.4.1 伸展
11.4.2 何时进行伸展
11.4.3 Python实现
11.4.4 伸展树的摊销分析*
11.5 (2,4)树
11.5.1 多路搜索树
11.5.2 (2,4)树的操作
11.6 红黑树
11.6.1 红黑树的操作
11.6.2 Python实现
11.7 练习
扩展阅读
第12章 排序与选择
12.1 为什么要学习排序算法
12.2 归并排序
12.2.1 分治法
12.2.2 基于数组的归并排序的实现
12.2.3 归并排序的运行时间
12.2.4 归并排序与递归方程*
12.2.5 归并排序的可选实现
12.3 快速排序
12.3.1 随机快速排序
12.3.2 快速排序的额外优化
12.4 再论排序:算法视角
12.4.1 排序下界
12.4.2 线性时间排序:桶排序和基数排序
12.5 排序算法的比较
12.6 Python的内置排序函数
12.7 选择
12.7.1 剪枝搜索
12.7.2 随机快速选择
12.7.3 随机快速选择分析
12.8 练习
扩展阅读
第13章 文本处理
13.1 数字化文本的多样性
13.2 模式匹配算法
13.2.1 穷举
13.2.2 Boyer-Moore算法
13.2.3 Knuth-Morris-Pratt算法
13.3 动态规划
13.3.1 矩阵链乘积
13.3.2 DNA和文本序列比对
13.4 文本压缩和贪心算法
13.4.1 霍夫曼编码算法
13.4.2 贪心算法
13.5 字典树
13.5.1 标准字典树
13.5.2 压缩字典树
13.5.3 后缀字典树
13.5.4 搜索引擎索引
13.6 练习
拓展阅读
第14章 图算法
14.1 图
14.2 图的数据结构
14.2.1 边列表结构
14.2.2 邻接列表结构
14.2.3 邻接图结构
14.2.4 邻接矩阵结构
14.2.5 Python实现
14.3 图遍历
14.3.1 深度优先搜索
14.3.2 深度优先搜索的实现和扩展
14.3.3 广度优先搜索
14.4 传递闭包
14.5 有向非循环图
14.6 最短路径
14.6.1 加权图
14.6.2 Dijkstra算法
14.7 最小生成树
14.7.1 Prim-Jarník算法
14.7.2 Kruskal算法
14.7.3 不相交分区和联合查找结构
14.8 练习
扩展阅读
第15章 内存管理和B树
15.1 内存管理
15.1.1 内存分配
15.1.2 垃圾回收
15.1.3 Python解释器使用的额外内存
15.2 存储器层次结构和缓存
15.2.1 存储器系统
15.2.2 高速缓存策略
15.3 外部搜索和B树
15.3.1 (a,b)树
15.3.2 B树
15.4 外部存储器中的排序
15.5 练习
拓展阅读
附录A Python中的字符串
附录B 有用的数学定理
参考文献
· · · · · · (收起)
喜欢读"数据结构与算法"的人也喜欢的电子书 · · · · · ·
支持 Web、iPhone、iPad、Android 阅读器
喜欢读"数据结构与算法"的人也喜欢 · · · · · ·
-
- Python 3面向对象编程 8.3
-
- python机器学习 7.9
-
- 流畅的Python 9.4
-
- 利用Python进行数据分析 8.6
-
- 复杂数据统计方法 8.8
-
- 算法精解 8.2
-
- 计算的本质 8.7
-
- Python 3标准库 8.1
-
- 贝叶斯方法 8.1
数据结构与算法的书评 · · · · · · ( 全部 6 条 )

对于刚接触Python,又想学习数据结构的同学来说,这本书真的灰常灰常好!!!
http://www.tianjun.me/essays/58 (6)一起用python之基础篇——数据结构 Posted on: 2014-08-27 19:58 Posted in : 一起用python, (撰写中。。。呃,写着写着,发觉其实原书写得很系统,一环扣一环,我这样子抽出来一点点地分析反而打乱了原有的结构。我这里写的,大致看下就...
(展开)

内容很好,深入浅出,翻译太差,建议英文版
这本书的翻译真的太差了,应该是直接机翻的,并且机翻的软件也很垃圾,经常是牛头不对马嘴。但即使是这样,也无法掩盖这本书内容的精彩。英语好的话建议直接原版。如果英文不好,又只会python,那只能看这本了。但切记,如果遇到不明所以,无法理解,读不通顺的情况,不要怀疑...
(展开)

数据结构与算法:Python语言实现
数据结构和算法是计算机科学的两个重要的支柱,两者具备不可分割性。 算法我理解为解决方案的准确而完整的描述。算法不等于程序,也不等于计算方法。当然程序也可以作为算法的一种描述,或者说不同语言的具体实现方式。程序通常还需要考虑很多与方法和分析无关的细节问题,这是...
(展开)

整体还不错,但错误处不下五十个
原版没看过,看到是翻译版,第一次看数据结构的书,结果竟然错误那么多,我说怎么看不懂,直到看第二遍才知道是个错误。 说完不足,再说点好的,整体上还是不错,适合有一定项目经验的想深入了解python的同学。 另外给个建议,里面有些代码还是不要省了,比如基于数组的双端队...
(展开)
> 更多书评 6篇
论坛 · · · · · ·
在这本书的论坛里发言这本书的其他版本 · · · · · · ( 全部2 )
-
John Wiley & Sons (2013)9.4分 93人读过
以下书单推荐 · · · · · · ( 全部 )
- T (dhcn)
- Data Analysis (viola)
- 程序员面试 (末末)
- 已购 (无明)
- 计算机教材 (Amber.W)
谁读这本书? · · · · · ·
二手市场
· · · · · ·
- 在豆瓣转让 有167人想读,手里有一本闲着?
订阅关于数据结构与算法的评论:
feed: rss 2.0
2 有用 🌊 ᎪᎡᎬᏕ ᏟᎻᎬᏪᏦ🐳 2020-11-19 18:59:26
还行
2 有用 日日 2022-09-08 15:01:48 广东
翻过,英文比中文好读。但哪怕是英文版,学习曲线也太陡峭了,不如自己看youtube多练几题快
11 有用 J&G 2019-02-15 13:40:21
中文翻译真是无力吐槽,对于自学来说简直是灾难,没几页就有严重的翻译错误,导致还得对照着英文版理一下。
5 有用 Tommy 2019-10-11 19:17:44
原版保平安系列
3 有用 遥控飞机 2019-01-25 08:59:52
翻译差劲。有些句子读两三遍仍读不通顺。不过内容很好,实例很有启发性