算法导论第十四章 数据结构的扩张

简介: 一、概要   我们在教科书上所学的所有数据结构都是最常规、最精简的数据结构,即便如此,基本上所有能遇上的问题都能用这些数据结构来解决。但是有一些特殊的问题,需要对现有的数据结构进行些许改造才能应付,这种改造是很细微的,且改造所添加的信息必须能被该数据结构上的常规操作所更新和维护。

一、概要

  我们在教科书上所学的所有数据结构都是最常规、最精简的数据结构,即便如此,基本上所有能遇上的问题都能用这些数据结构来解决。但是有一些特殊的问题,需要对现有的数据结构进行些许改造才能应付,这种改造是很细微的,且改造所添加的信息必须能被该数据结构上的常规操作所更新和维护。比如在链表上添加一个数据域来记录结点的位置、在一棵二叉搜索树上添加一个指针域来记录结点的后继指针,等等。

  本章介绍两种通过扩张红黑树构造出的数据结构,一种是动态顺序统计树;另一种是区间树。然后介绍了如何扩张现有数据结构的一个通用方法。本章不想花太多时间和言语来描述,思想很简单,告诉我们怎么样根据实际问题,扩张现有数据结构,而不是自己去实现一种新的数据结构。

二、扩张的两种数据结构

  简单总结下通过红黑树扩张的两种数据结构:动态顺序统计树和区间树。

  动态顺序统计树在原红黑树的基础上增加一个数据域 x.size,其等于 x 左右孩子的节点数。通过这一小小的改造,就可以利用红黑树解第9章介绍的顺序统计,其所有操作的时间复杂度降到O(lgn)。对于改造的动态顺序统计数,有两个比较重要的函数:一就是求第 k 小的数:Select(x, k); 二是求节点 x 的排名:Rank(T, x),这两个操作都能在O(lgn)内完成。需要注意的是,对新添加的属性 x.size,原有数据结构的操作都要对 size属性进行维护,如添加一个元素的时候,相应树枝上的元素的size属性也应该做更新,删除亦是。如下是一棵动态顺序统计树:

  区间树则是对红黑树扩张以便支持由区间构成的动态集合操作,红黑树用到的关键字值是区间树的区间左端点值。以下是一个区间树及其所表示的区间:

  区间树的节点还扩展了一个域max,就是以该节点为根的子树的所有区间元素的右端点的最大值。该域很容易在O(1)的时间内维护,那就是左子结点的max、右子结点的max和自身区间的右端点三者的最大值。

  区间树提供一些与区间有关的操作,比如判断一个区间有没有与区间树中的任何一个区间元素有交集,判断一个点是否落在区间树中的任意一个区间元素中。

关于如何扩张数据结构的方法:

  书上介绍了四个扩张的步骤:

1)选择一种基础数据结构

2)确定基础数据结构中需要维护的附加信息。

3)检验基础数据结构上的基本修改操作能否维护附加信息。

4)设计一些新操作

关于本章中部分课后习题的解答可以参见本文:http://www.cnblogs.com/yiyezhai/archive/2013/01/29/2879729.html

目录
打赏
0
0
0
0
5
分享
相关文章
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构。本文介绍了K-means算法的基本原理,包括初始化、数据点分配与簇中心更新等步骤,以及如何在Python中实现该算法,最后讨论了其优缺点及应用场景。
319 6
|
1月前
|
算法系列之数据结构-二叉树
树是一种重要的非线性数据结构,广泛应用于各种算法和应用中。本文介绍了树的基本概念、常见类型(如二叉树、满二叉树、完全二叉树、平衡二叉树、B树等)及其在Java中的实现。通过递归方法实现了二叉树的前序、中序、后序和层次遍历,并展示了具体的代码示例和运行结果。掌握树结构有助于提高编程能力,优化算法设计。
60 9
 算法系列之数据结构-二叉树
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
这篇文章详细介绍了Dijkstra和Floyd算法,这两种算法分别用于解决单源和多源最短路径问题,并且提供了Java语言的实现代码。
196 3
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
|
1月前
|
算法系列之数据结构-Huffman树
Huffman树(哈夫曼树)又称最优二叉树,是一种带权路径长度最短的二叉树,常用于信息传输、数据压缩等方面。它的构造基于字符出现的频率,通过将频率较低的字符组合在一起,最终形成一棵树。在Huffman树中,每个叶节点代表一个字符,而每个字符的编码则是从根节点到叶节点的路径所对应的二进制序列。
67 3
 算法系列之数据结构-Huffman树
|
1月前
|
算法系列之数据结构-二叉搜索树
二叉查找树(Binary Search Tree,简称BST)是一种常用的数据结构,它能够高效地进行查找、插入和删除操作。二叉查找树的特点是,对于树中的每个节点,其左子树中的所有节点都小于该节点,而右子树中的所有节点都大于该节点。
85 22
C 408—《数据结构》算法题基础篇—链表(下)
408考研——《数据结构》算法题基础篇之链表(下)。
114 29
C 408—《数据结构》算法题基础篇—链表(上)
408考研——《数据结构》算法题基础篇之链表(上)。
144 25
C 408—《数据结构》算法题基础篇—数组(通俗易懂)
408考研——《数据结构》算法题基础篇之数组。(408算法题的入门)
116 23
探索局域网电脑监控软件:Python算法与数据结构的巧妙结合
在数字化时代,局域网电脑监控软件成为企业管理和IT运维的重要工具,确保数据安全和网络稳定。本文探讨其背后的关键技术——Python中的算法与数据结构,如字典用于高效存储设备信息,以及数据收集、异常检测和聚合算法提升监控效率。通过Python代码示例,展示了如何实现基本监控功能,帮助读者理解其工作原理并激发技术兴趣。
114 20
【C++数据结构——树】二叉树的遍历算法(头歌教学实验平台习题) 【合集】
本任务旨在实现二叉树的遍历,包括先序、中序、后序和层次遍历。首先介绍了二叉树的基本概念与结构定义,并通过C++代码示例展示了如何定义二叉树节点及构建二叉树。接着详细讲解了四种遍历方法的递归实现逻辑,以及层次遍历中队列的应用。最后提供了测试用例和预期输出,确保代码正确性。通过这些内容,帮助读者理解并掌握二叉树遍历的核心思想与实现技巧。
131 2
下一篇
oss创建bucket