空间数据库与结构之R树(R Tree)

叶子节点:树的最底端的节点
也就是R8 R9 R10 R11 R12 R13 R14 R15 R17 R18 R19
非叶子节点:除了叶子节点以外的节点
根:树的最顶端的节点
BBs(bounding boxes):能圈住一个图形的最小矩形.

R树:

1 点的查询:

描述:假设T为一棵R树的根结点,查找所有搜索点P覆盖的记录条目。
第一步:查找子树
遍历根的所有目录矩形包含P的子节点, 直到到达叶节点
每个节点可能发生两种情况:
1是没有矩形点P, 那么搜索在这个子树中结束(即使S或P位于目录矩形中,但如果不被子树中的矩形所包裹,也会搜索不到?).
2是点P包含在一个或多个目录矩形中,则访问相应的子树.(因为目录矩形可以重叠,所以P可以包含在一个或多个目录矩形中)
第二步:查找叶子结点
搜索在第一步中包含点P的的内部节点的叶节点,保留那些MBB中包含P的叶节点.

例子:
在这里插入图片描述

先从根节点开始,第一个根节点R15里没有,第二个根节点R16里有.
然后就不用管R15的所有子节点了,直接搜索R16的所有子节点.
先看R13,里面有,保留下来
再看R14,里面也有,保留下来
R13和R14也叫内部节点(inner node)
然后再分别搜索R13和R14的子节点.(在这道题里也就是叶节点了)
先看R13的子节点, 05没有 07 没有.那么就不用管了, R13结束.
再看R14的子节点,08有,08 有, 10 没有.R14搜索结束.
所有搜索结束, 就是BB08.


2 区间查询
就是看有没有BBs被包含在画出来的矩形中.
在这里插入图片描述

例子
先从根节点R15, R16开始,发现两个都和矩形Q有交集.
那么先开始搜索R15的子节点
R11没有,R12有,保留R12
然后搜索R12的子节点 04 06 09
04 有, 06 没有,09有

再搜索R16的子节点
R13有,R14没有,保留R13
然后搜索R13的子节点 05 07
05 有, 07 没有
所以最后是04 05 09


3 插入

情况1 插入17
在这里插入图片描述
寻找合适的叶节点
从根节点开始
选择把这个新的bounding box包含进去后扩大范围最小的那个根节点.
先看R15, 扩大后增加的范围 再看R16,扩大后增加的范围
相比较之下R16增加的少一点.
然后重复这个步骤,R16的子节点是R13,R14
先看R13增加的范围,再看R14增加的范围,然后比较,相比较之下R14增加得少一点
选择R14, 把这个新的bounding box 17放进去,就可以了

情况2 插入18
在这里插入图片描述
如果插入后, 发现同一个子节点上的叶节点的数目超过M了.也就是发生了上溢,就需要分割叶
把这个子节点上的叶节点分成两部分.
重新添加一个新的子节点.
如果还是下溢,就继续往上分解,直到分解到根.


删除

情况1
先找到需要删除的条目
删除它.
然后改变上一层的目录矩形形状.

情况2 删除7
在这里插入图片描述
在这里插入图片描述
删除后,一个节点下的条目小于m了.
那么就移除剩下的条目和父节点,重新插入
如果父节点所在层也发生了下溢,就循环这个过程,直到根节点.
重新插入的时候要注意插入到原来他们的所在层.
然后再插入刚刚剩余的条目,再次分解什么的.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值