R树简介

B树与R树

计算机磁盘的文件管理常使用B树和B+树。B树和B+树能良好地处理一维空间存储的问题。实际上,B树是一棵平衡树,它是把一维直线分为若干段线段,当我们查找满足某个要求的点的时候,只要去查找它所属的线段即可。这种思想其实是先找到一个大的空间,再逐步缩小所要查找的空间,最终在一个自己设定的最小不可分空间内找出满足要求的解。

R树恰恰也用到了这样的思想。R树是B树的扩展,它作为最流行的空间索引结构,广泛地应用于各种数据库系统。

R树很好地解决了这种高维空间搜索问题。它把B树的思想扩展到了多维空间,采用了B树分割空间的思想,并在添加、删除操作时采用合并、分解结点的方法,保证树的平衡性。因此,R树就是一棵用来存储高维数据的平衡树。

R树简介

1984年,加州大学伯克利分校的Guttman发表了一篇题为“R-trees: a dynamic index structure for spatial searching”的论文,向世人介绍了R树这种处理高维空间存储问题的数据结构。

R树在数据库等领域做出的功绩是非常显著的。举个简单的例子:

SELECT stu_id FROM TRAN 
WHERE 80 <= maths and maths <= 90 
               80 <= chem and chem <= 90

传统的方法需要先找出math成绩在[80,90]的学生,再从中找出chems成绩再[80,90]的学生。许多学生并不符合第二个条件,但却由于符合第一个条件二被选出,影响了查询效率。R树解决了这类高维搜索问题,大大提高了数据库查询效率。

R树的数据结构

如上所述,R树是B树在高维空间的扩展,是一棵平衡树。每个R树的叶子结点包含了多个指向不同数据的指针,这些数据可以是存放在硬盘中的,也可以是存在内存中。根据R树的这种数据结构,当我们需要进行一个高维空间查询时,我们只需要遍历少数几个叶子结点所包含的指针,查看这些指针指向的数据是否满足要求即可。

R树简介_第1张图片

一棵R树满足如下的性质:
1. 除非它是根结点之外,所有叶子结点包含有m至M个记录索引(条目)。作为根结点的叶子结点所具有的记录个数可以少于m。通常,m=M/2。
2. 对于所有在叶子中存储的记录(条目),I是最小的可以在空间中完全覆盖这些记录所代表的点的矩形(注意:此处所说的“矩形”是可以扩展到高维空间的)。
3. 每一个非叶子结点拥有m至M个孩子结点,除非它是根结点。
4. 对于在非叶子结点上的每一个条目,i是最小的可以在空间上完全覆盖这些条目所代表的店的矩形(同性质2)。
5. 所有叶子结点都位于同一层,因此R树为平衡树。

其中每个非叶结点表示了一个最小矩形,它包含了所有子树中的点。每个叶子结点则表示一个点。

R树简介_第2张图片

如上图,如果要查询 x属于[5,8.5] y属于[4,7.5]的点,可以在对应的坐标图上画出查询区域。只需根据R树中对应区块与查询区域重合部分即可逐层确认查询结果的点。

R树的操作

插入

R树的插入操作与树的插入操作类似。由根结点开始寻找使所有块边长和最小的块进行递归插入,直到叶结点。当新的数据记录需要被添加入叶结点时,若叶结点溢出,需要对叶结点进行分裂操作。
R树简介_第3张图片
R树简介_第4张图片

删除

R树的删除操作将被删除的结点直接抹去。如果剩余结点少于结点最大度的40%,则下溢,需要将剩余的结点放入重插列表。
R树简介_第5张图片
R树简介_第6张图片

上两图将点k删除,引起了E3的下溢,因此将s放入重插列表,将E3抹去。而这又递归地导致E9下溢,从而需要将E2放入重插列表,将E9抹去。
这样得到的R树再按顺序插入E2、s,才是完成了删除操作。

你可能感兴趣的:(R树简介)