高级数据结构

内容简介编辑

高级数据结构林厚从主编的《高级数据结构》在基本数据结构的基础上,围绕一些常用的高级数据结构,结合大量实战例题,深入分析“数据结构是如何服务于算法的”。本书主要内容包括:哈希表、树与二叉树、优先队列与堆、并查集、线段树、树状数组、伸展树、Treap、AVL树、红—黑树、SBT、块状链表与块状树、后缀树与后缀数组、树链剖分与动态树等。
  《高级数据结构》的适用对象包括:中学信息学竞赛选手及辅导老师、大学ACM比赛选手及教练、高等院校计算机专业的师生、程序设计爱好者等。
为满足一些特定需要,人们可以对简单数据结构进行扩展,实现一些功能更为强大、具有更多操作的高级数据结构。
例如:
(1)高级线性结构的概念;
(2)多维数组的概念、存储表示、基本运算;
(3)广义表的概念、存储表示、基本运算;
(4)存储管理技术;
(5)Trie树结构和Patricia树结构原理及其应用;
(6)二叉搜索树的几个变体,掌握平衡的二叉搜索树的几种变换,如线段树,哈夫曼树。

目录编辑

第1章 哈希表
  1.1 哈希表的基本原理
  1.2 哈希表的基本概念
  1.3 哈希函数的构造
  1.4 哈希表的基本操作
  1.5 冲突的处理
  1.6 哈希表的性能分析
  1.7 哈希表的应用举例
  1.8 本章习题
  第2章 树与二叉树
  2.1 树
  2.1.1 树的存储结构
  2.1.2 树的遍历
  2.2 二叉树
  2.2.1 普通树转换成二叉树
第1章 哈希表 1.1 哈希表的基本原理 1.2 哈希表的基本概念 1.3 哈希函数的构造 1.4 哈希表的基本操作 1.5 冲突的处理 1.6 哈希表的性能分析 1.7 哈希表的应用举例 1.8 本章习题
第2章 树与二叉树 2.1 树 2.1.1 树的存储结构 2.1.2 树的遍历 2.2 二叉树 2.2.1 普通树转换成二叉树 2.2.2 二叉树的遍历 2.2.3 二叉树的其他操作 2.2.4 二叉树的形态 2.3 二叉排序树 2.4 哈夫曼二叉树 2.5 字典树 2.6 本章习题
第3章 优先队列与二叉堆 3.1 优先队列 3.2 二叉堆 3.2.1 Put操作 3.2.2 Get操作 3.3 可并堆 3.3.1 左偏树的定义 3.3.2 左偏树的基本操作 3.4 本章习题
第4章 并查集 4.1 并查集的主要操作 4.2 并查集的实现 4.2.1 并查集的数组实现 4.2.2 并查集的链表实现 4.2.3 并查集的树实现 4.3 并查集的应用举例 4.4 本章习题
第5章 线段树 5.1 线段树的应用背景 5.2 线段树的初步实现 5.2.1 线段树的结构 5.2.2 线段树的性质 5.2.3 线段树的存储 5.2.4 线段树的常用操作 5.2.4.1 线段树的构造 5.2.4.2 线段树的查询 5.2.4.3 线段树的修改 5.2.4.4 线段树的延迟修改 5.3 线段树在一些经典问题中的应用 5.3.1 逆序对问题 5.3.2 矩形覆盖问题 5.4 线段树的扩展 5.4.1 用线段树优化动态规划 5.4.2 将线段树扩展到高维 5.4.3 线段树与平衡树的结合 5.5 线段树与其他数据结构的比较 5.6 线段树的应用举例 5.7 本章习题
第6章 树状数组 6.1 树状数组的问题模型 6.2 树状数组的基本思想 6.3 树状数组的实现 6.3.1 子集的划分方法 6.3.2 查询前缀和 6.3.3 修改子集和 6.4 树状数组的常用技巧 6.4.1 查询任意区间和 6.4.2 利用SHill数组求出原数组a的某个元素值 6.4.3 找到某个前缀和对应的前缀下标index 6.4.4 成倍扩张/缩减 6.4.5 初始化树状数组 6.5 树状数组与线段树的比较 6.6 树状数组扩展到高维的情形 6.7 树状数组的应用举例 6.8 本章习题
第7章 伸展树 7.1 伸展树的主要操作 7.1.1 伸展操作 7.1.2 伸展树的基本操作 7.2 伸展树的算法实现 7.3 伸展树的效率分析 7.4 伸展树的应用举例 7.5 本章习题
第8章 Treap 8.1 Treap的基本操作 8.2 Treap的算法实现 8.3 Treap的应用举例 8.4 本章习题
第9章 平衡树 9.1 AVL树 9.2 红—黑树 9.3 SBT 9.3.1 SBT的基本操作 9.3.2 SBT的效率分析 9.3.3 SBT的算法实现 9.4 本章习题
第10章 块状链表与块状树 10.1 块状链表的基本思想 10.2 块状链表的基本操作 10.3 块状链表的扩张 10.3.1 维护区间和以及区间最值 10.3.2 维护局部数据有序化 10.3.3 维护区间翻转 10.4 块状链表与其他数据结构的比较 10.5 分块思想在树上的应用——块状树 10.6 块状链表的应用举例 10.7 本章习题
第11章 后缀树与后缀数组 11.1 后缀树的简介 11.2 后缀树的定义 11.3 后缀树的构建 11.3.1 后缀树的朴素构建算法 11.3.2 后缀树的线性时间构建算法 11.3.2.1 隐式树的朴素构建 11.3.2.2 扩展规则约定 11.3.2.3 后缀链加速 11.3.2.4 进一步加速 11.3.2.5 后缀树拓展到多串的形式 11.3.2.6 代码实现 11.3.2.7 相关证明 11.4 后缀树的应用 11.4.1 字符串(集合)的精确匹配 11.4.1.1 情形一 11.4.1.2 情形二 11.4.1.3 情形三 11.4.1.4 情形四 11.4.2 公共子串问题 11.4.2.1 情形五 11.4.2.2 情形六 11.4.2.3 情形七 11.4.2.4 情形八 11.4.2.5 情形九 11.4.3 重复子串问题 11.4.3.1 情形十 11.4.3.2 情形十一 11.4.3.3 情形十二 11.5 后缀数组的简介 11.6 后缀数组的定义 11.7 后缀数组的构建 11.7.1 一种直接的构建算法 11.7.2 倍增算法 11.7.2.1 倍增算法描述 11.7.2.2 倍增算法代码 11.7.3 由后缀树得到后缀数组 11.7.4 DC3算法和DC算法 11.7.4.1 DC3算法 11.7.4.2 DC算法 11.8 LCP的引入 11.9 后缀数组的应用 11.9.1 后缀排序的直接应用 11.9.1.1 Burrows—Wheeler变换 11.9.1.2 多模式串的匹配 11.9.2 通过引入LCP优化 11.9.2.1 多模式串的匹配 11.9.2.2 重复子串问题 11.9.2.3 最长回文子串 11.9.2.4 最长公共子串 11.9.3 后缀数组的应用举例 11.10 本章习题
第12章 树链剖分与动态树 12.1 树链剖分的思想和性质 12.2 树链剖分的实现及应用 12.3 动态树的初探 12.3.1 动态树的常用功能 12.3.2 动态树的简单情形 12.4 动态树的实现 12.4.1 动态树的基本操作及其实现 12.4.1.1 动态树的问题模型 12.4.1.2 用Splay维护实路径 12.4.2 动态树操作的时间复杂度分析 12.4.2.1 动态树操作的次数 12.4.2.2 Splay操作的平摊时间 12.5 动态树的经典应用 12.5.1 求最近公共祖先 12.5.2 并查集操作 12.5.3 求最大流 12.5.4 求生成树 12.6 动态树的应用举例 12.7 本章习题

你可能感兴趣的:(高级数据结构)