-
内容大纲
本书是备受广大读者推崇的数据结构与算法入门教程,已在GitHub获得超60k的Star,并多次登顶GitHub Trending。书中系统介绍了数据结构与算法基础、复杂度分析、数组与链表、栈与队列、哈希表、树、堆、图、搜索、排序、分治、回溯、动态规划和贪心算法等核心知识,通过清晰易懂的解释和丰富的代码示例,以及生动形象的全彩插图和在线动画图解,揭示算法工作原理和数据结构底层实现,教授读者如何选择和设计算法来解决不同类型的问题,切实提升编程技能,构建完整的数据结构与算法知识体系。 -
作者介绍
靳宇栋(@krahets) 前华为高级算法工程师,上海交通大学硕士,西安交通大学本科,专注于3D重建与渲染、3D生成算法的研究。曾获VEX机器人世界锦标赛冠军、全球人工智能创新大赛一等奖。喜欢在开源社区分享知识,作品的GitHub Star超60,000,订阅人数超460,000. -
目录
序
前言
第1章 初识算法
1.1 算法无处不在
1.2 算法是什么
1.2.1 算法定义
1.2.2 数据结构定义
1.2.3 数据结构与算法的关系
1.3 小结
第2章 复杂度分析
2.1 算法效率评估
2.1.1 实际测试
2.1.2 理论估算
2.2 迭代与递归
2.2.1 迭代
2.2.2 递归
2.2.3 两者对比
2.3 时间复杂度
2.3.1 统计时间增长趋势
2.3.2 函数渐近上界
2.3.3 推算方法
2.3.4 常见类型
2.3.5 最差、最佳、平均时间复杂度
2.4 空间复杂度
2.4.1 算法相关空间
2.4.2 推算方法
2.4.3 常见类型
2.4.4 权衡时间与空间
2.5 小结
第3章 数据结构
3.1 数据结构分类
3.1.1 逻辑结构:线性与非线性
3.1.2 物理结构:连续与分散
3.2 基本数据类型
3.3 数字编码
3.3.1 原码、反码和补码
3.3.2 浮点数编码
3.4 字符编码
3.4.1 ASCII字符集
3.4.2 GBK字符集
3.4.3 Unicode字符集
3.4.4 UTF-8编码
3.4.5 编程语言的字符编码
3.5 小结
第4章 数组与链表
4.1 数组
4.1.1 数组常用操作
4.1.2 数组的优点与局限性
4.1.3 数组典型应用
4.2 链表
4.2.1 链表常用操作
4.2.2 数组与链表对比
4.2.3 常见链表类型
4.2.4 链表典型应用
4.3 列表
4.3.1 列表常用操作
4.3.2 列表实现
4.4 内存与缓存
4.4.1 计算机存储设备
4.4.2 数据结构的内存效率
4.4.3 数据结构的缓存效率
4.5 小结
第5章 栈与队列
5.1 栈
5.1.1 栈的常用操作
5.1.2 栈的实现
5.1.3 两种实现对比
5.1.4 栈的典型应用
5.2 队列
5.2.1 队列常用操作
5.2.2 队列实现
5.2.3 队列典型应用
5.3 双向队列
5.3.1 双向队列常用操作
5.3.2 双向队列实现
5.3.3 双向队列应用
5.4 小结
第6章 哈希表
6.1 哈希表
6.1.1 哈希表常用操作
6.1.2 哈希表简单实现
6.1.3 哈希冲突与扩容
6.2 哈希冲突
6.2.1 链式地址
6.2.2 开放寻址
6.2.3 编程语言的选择
6.3 哈希算法
6.3.1 哈希算法的目标
6.3.2 哈希算法的设计
6.3.3 常见哈希算法
6.3.4 数据结构的哈希值
6.4 小结
第7章 树
7.1 二叉树
7.1.1 二叉树常见术语
7.1.2 二叉树基本操作
7.1.3 常见二叉树类型
7.1.4 二叉树的退化
7.2 二叉树遍历
7.2.1 层序遍历
7.2.2 前序、中序、后序遍历
7.3 二叉树数组表示
7.3.1 表示完美二叉树
7.3.2 表示任意二叉树
7.3.3 优点与局限性
7.4 二叉搜索树
7.4.1 二叉搜索树的操作
7.4.2 二叉搜索树的效率
7.4.3 二叉搜索树常见应用
7.5 AVL树
7.5.1 AVL树常见术语
7.5.2 AVL树旋转
7.5.3 AVL树常用操作
7.5.4 AVL树典型应用
7.6 小结
第8章 堆
8.1 堆
8.1.1 堆的常用操作
8.1.2 堆的实现
8.1.3 堆的常见应用
8.2 建堆操作
8.2.1 借助入堆操作实现
8.2.2 通过遍历堆化实现
8.2.3 复杂度分析
8.3 Top-k问题
8.3.1 方法一:遍历选择
8.3.2 方法二:排序
8.3.3 方法三:堆
8.4 小结
第9章 图
9.1 图
9.1.1 图的常见类型与术语
9.1.2 图的表示
9.1.3 图的常见应用
9.2 图的基础操作
9.2.1 基于邻接矩阵的实现
9.2.2 基于邻接表的实现
9.2.3 效率对比
9.3 图的遍历
9.3.1 广度优先遍历
9.3.2 深度优先遍历
9.4 小结
第10章 搜索
10.1 二分查找
10.1.1 区间表示方法
10.1.2 优点与局限性
10.2 二分查找插入点
10.2.1 无重复元素的情况
10.2.2 存在重复元素的情况
10.3 二分查找边界
10.3.1 查找左边界
10.3.2 查找右边界
10.4 哈希优化策略
10.4.1 线性查找:以时间换空间
10.4.2 哈希查找:以空间换时间
10.5 重识搜索算法
10.5.1 暴力搜索
10.5.2 自适应搜索
10.5.3 搜索方法选取
10.6 小结
第11章 排序
11.1 排序算法
11.1.1 评价维度
11.1.2 理想排序算法
11.2 选择排序
11.3 冒泡排序
11.3.1 算法流程
11.3.2 效率优化
11.3.3 算法特性
11.4 插入排序
11.4.1 算法流程
11.4.2 算法特性
11.4.3 插入排序的优势
11.5 快速排序
11.5.1 算法流程
11.5.2 算法特性
11.5.3 快速排序为什么快
11.5.4 基准数优化
11.5.5 尾递归优化
11.6 归并排序
11.6.1 算法流程
11.6.2 算法特性
11.6.3 链表排序
11.7 堆排序
11.7.1 算法流程
11.7.2 算法特性
11.8 桶排序
11.8.1 算法流程
11.8.2 算法特性
11.8.3 如何实现平均分配
11.9 计数排序
11.9.1 简单实现
11.9.2 完整实现
11.9.3 算法特性
11.9.4 局限性
11.10 基数排序
11.10.1 算法流程
11.10.2 算法特性
11.11 小结
第12章 分治
12.1 分治算法
12.1.1 如何判断分治问题
12.1.2 通过分治提升效率
12.1.3 分治常见应用
12.2 分治搜索策略
12.3 构建二叉树问题
12.4 汉诺塔问题
12.5 小结
第13章 回溯
13.1 回溯算法
13.1.1 尝试与回退
13.1.2 剪枝
13.1.3 框架代码
13.1.4 常用术语
13.1.5 优点与局限性
13.1.6 回溯典型例题
13.2 全排列问题
13.2.1 无相等元素的情况
13.2.2 考虑相等元素的情况
13.3 子集和问题
13.3.1 无重复元素的情况
13.3.2 考虑重复元素的情况
13.4 n皇后问题
13.5 小结
第14章 动态规划
14.1 初探动态规划
14.1.1 方法一:暴力搜索
14.1.2 方法二:记忆化搜索
14.1.3 方法三:动态规划
14.1.4 空间优化
14.2 动态规划问题特性
14.2.1 最优子结构
14.2.2 无后效性
14.3 动态规划解题思路
14.3.1 问题判断
14.3.2 问题求解步骤
14.40 -1背包问题
14.5 完全背包问题
14.5.1 完全背包问题
14.5.2 零钱兑换问题I
14.5.3 零钱兑换问题II
14.6 编辑距离问题
14.7 小结
第15章 贪心
15.1 贪心算法
15.1.1 贪心算法的优点与局限性
15.1.2 贪心算法特性
15.1.3 贪心算法解题步骤
15.1.4 贪心算法典型例题
15.2 分数背包问题
15.3 最大容量问题
15.4 最大切分乘积问题
15.5 小结
附录A术语表
同类热销排行榜
- C语言与程序设计教程(高等学校计算机类十二五规划教材)16
- 电机与拖动基础(教育部高等学校自动化专业教学指导分委员会规划工程应用型自动化专业系列教材)13.48
- 传感器与检测技术(第2版高职高专电子信息类系列教材)13.6
- ASP.NET项目开发实战(高职高专计算机项目任务驱动模式教材)15.2
- Access数据库实用教程(第2版十二五职业教育国家规划教材)14.72
- 信号与系统(第3版下普通高等教育九五国家级重点教材)15.08
- 电气控制与PLC(普通高等教育十二五电气信息类规划教材)17.2
- 数字电子技术基础(第2版)17.36
- VB程序设计及应用(第3版十二五职业教育国家规划教材)14.32
- Java Web从入门到精通(附光盘)/软件开发视频大讲堂27.92
推荐书目
-
孩子你慢慢来/人生三书 华人世界率性犀利的一枝笔,龙应台独家授权《孩子你慢慢来》20周年经典新版。她的《...
-
时间简史(插图版) 相对论、黑洞、弯曲空间……这些词给我们的感觉是艰深、晦涩、难以理解而且与我们的...
-
本质(精) 改革开放40年,恰如一部四部曲的年代大戏。技术突变、产品迭代、产业升级、资本对接...