数据结构笔记:R树

R-trees: a dynamic index structure for spatial searching 1984

1 介绍

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

2 R树数据结构

  • R树采用了一种称为MBR(Minimal Bounding Rectangle,最小边界矩形)的方法,来分割空间
    • 从叶子结点开始用矩形(rectangle)将空间框起来,结点越往上,框住的空间就越大,以此对空间进行分割
    • R树的每个结点不存放空间要素的值。叶结点中存储该结点对应的空间要素的外包络矩形和空间要素标识

  • 首先假设所有数据都是二维空间下的点,图中仅仅标志了R8区域中的数据,也就是那个shape of data object
  • 为了实现R树结构,用一个最小边界矩形恰好框住这个不规则区域
    • 这样就构造出了一个区域:R8
    • 其他实线包围住的区域,如R9,R10,R12等都是同样的道理
      • 一共得到了12个最最基本的最小矩形。这些矩形都将被存储在子结点中
  • 下一步操作就是进行高一层次的处理。我们发现R8,R9,R10三个矩形距离最为靠近,因此就可以用一个更大的矩形R3恰好框住这3个矩形
    • 同样道理,R15,R16被R6恰好框住,R11,R12被R4恰好框住
    • 所有最基本的最小边界矩形被框入更大的矩形中之后
  • 再次迭代,用更大的框去框住这些矩形
  • 根据R树的这种数据结构,当我们需要进行一个高维空间查询时,我们只需要遍历少数几个叶子结点所包含的指针,查看这些指针指向的数据是否满足要求即可。
    • ——>这种方式使我们不必遍历所有数据即可获得答案,效率显著提高

3 R树的查找

4 R树性质

  • 除非它是根结点之外,所有叶子结点包含有m至M个记录索引(条目)。

    • 作为根结点的叶子结点所具有的记录个数可以少于m。通常,m=M/2。

  • 每一个非叶子结点拥有m至M个孩子结点,除非它是根结点

  • 所有叶子结点都位于同一层,因此R树为平衡树

5 叶子节点的结构

  • 叶子结点所保存的数据形式为:(I, tuple-identifier)
    • tuple-identifier表示的是一个存放于数据库中的tuple,也就是一条记录,它是n维的。
    • I是一个n维空间的矩形,并可以恰好框住这个叶子结点中所有记录代表的n维空间中的点。
      • I=(I0,I1,…,In-1)
    • I所代表的就是图中的矩形
    • 有两个tuple-identifier,在图中即表示为那两个点

5 非叶子节点的结构

  • R树的非叶子结点存放的数据结构为:(I, child-pointer)
    • child-pointer是指向孩子结点的指针
    • I是覆盖所有孩子结点对应矩形的矩形

6 R树的插入

6.1 有足够的空间插入

  • 由于插入的x所在的区域P2的数据条目仍然有足够的空间容纳条目x,且x的区域面积即MBR也位于区域P2之内
  • 所以这种情况下,我们认为x拥有足够的插入空间。

6.2 增大MBR

由于插入的y所在的区域P2的数据条目仍然有足够的空间容纳条目y,但是y的区域面积即MBR并不完全位于P2的区域之内,因此我们在插入数据y后会导致P2区域的相应扩大

6.3 需要进行分裂的插入

  • 由于插入的w所在的区域P1的数据条目已经没有足够的空间容纳条目w,因为假设我们定义R树的阶m=4,而区域P1已经容纳了四个条目「A,B,C,K」了,插入w后孩子数为5,已经超过m=4了
  • 所以要进行分类操作,来保证树的平衡性

  • 采用分裂算法对结点(区域)P2进行合理地分裂
    • 使其分裂成P1(包含A,B)和P5(包含k,w)两个结点
  • 由于分裂之后原来根结点「P1,P2,P3,P4」变成了「P1,P2,P3,P,P5」,因此根结点的孩子数由4变成5,超过了阶数m=4.
    • 所以根结点也要进行分裂,分裂成Q1(包含P1,P5,P2)和Q2(包含P3,P4)两个结点
  • 由于此时分裂已经传递到根结点,所以生成新的根结点记录Q1,Q2。

7 分裂

7.1 挑选seed

  • 对于所有条目中的每一对E1和E2,计算可以包裹着E1,E2的最小限定框J=MBR(E1, E2) ,
    • 然后计算增量d= J-E1-E2.
      • 从 J 的面积中减去E1 和 E2 的面积,以找到包含两者所需的额外空间。
      • 这个增量 d 反映了将E1 和E2 放在同一个边界矩形中所需的“额外”空间。
    • 计算结束后选择d最大的一对(即增量最大)
      • 选择增量 d 最大的一对条目的原因是,这样可以保证分裂后,生成的两个分组之间的重叠区域最小

7.2 分类条目分组

  • 挑选出seed1和seed2后,就将剩下的要分配的分裂条目分给这两个seed使它们各称为一个组
    • 这个分配的原则就是离谁比较“近”就和谁一组
      • 近指的是,对于条目E,分别计算可以包裹着E和seed1的最小限定框J1=MBR(E,seed1), 可以包裹着E和seed2的最小限定框J2=MBR(E,seed2)
      • 再分别计算增量d1=J1-E-seed1,d2=J2-E-seed2。d1,d2哪个小就说明哪个“近”

8 删除

  • B树删除过程中,如果出现结点的记录数少于半满(即下溢)的情况,则直接把这些记录与其他叶子的记录“融合”(两个相邻结点合并)
  • R树却是直接重新插入

举例:

以下是原始的空间分割和R-tree

 现在删除一个绿色的区域

 此时对应的MBR中只有一条记录,不满足R树性质,发生下溢,将另一个绿色的区域放入链表中

 放入链表后,上层MBR也只有一条记录,所以也放入链表中

 分别进行插入操作(也是一样,先找到矩形应该插入的位置,然后判断是否需要分裂)

参考内容:什么是R树? - 知乎 (zhihu.com)

空间数据索引RTree(R树)完全解析及Java实现 - 佳佳牛 - 博客园 (cnblogs.com)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/147856.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

塑料橡胶工厂数字孪生可视化管理平台建设,推动制造业智慧数字化转型

中国制造业正面临向数字化、智能化转型的关键时期,到2035年规模以上制造业企业全面普及数字化、网络化,智能化,推动制造业数字化战略转型已迫在眉睫。加快5G、数字孪生、人工智能等新一代信息技术与塑料橡胶产业融合,不断增强塑料…

leetcode做题笔记1334. 阈值距离内邻居最少的城市

有 n 个城市,按从 0 到 n-1 编号。给你一个边数组 edges,其中 edges[i] [fromi, toi, weighti] 代表 fromi 和 toi 两个城市之间的双向加权边,距离阈值是一个整数 distanceThreshold。 返回能通过某些路径到达其他城市数目最少、且路径距离…

「题解」相交链表

🍉题目 题目链接 🍉解析 “提示”部分有提示链表数不为零,所以讨论链表为空的情况。 最简单粗暴的思路就是:遍历链表,先使用循环遍历A链表,然后嵌套循环遍历B,比对A、B是否存在地址相同的…

JSP注释方式演示 讲解显式与隐式注释

好 今天我们来了解一下jsp中的注释哦 它支持两种注释: 显式注释/隐式注释 显式注释 是 允许被客户端看到的 就是 打开浏览器 用查看源码方式能看到的注释 与之对应 隐式注释 就是 在客户端 是无法看到这些注释信息的 显式注释 的语法就是html的注释语法 <!-- 显式注释 --…

文生图超级大合集!几乎包含所有模型,提示词教程

除了DALLE 3、Midjourney、Stable Difusion&#xff0c;你还知道哪些好用小众的文生图模型吗&#xff1f; 你知道一张精美的AI图片&#xff0c;需要哪些精准的提示词、效果融合以及制作流程吗&#xff1f; 如果把几乎所有文生图模型集合在一个平台中&#xff0c;并且还能叠加…

小波神经网络的时间序列预测——短时交通流量预测

大家好&#xff0c;我是带我去滑雪&#xff01; 小波神经网络&#xff08;Wavelet Neural Network&#xff0c;WNN&#xff09;结合了小波变换和神经网络的特性&#xff0c;是一种在信号处理和模式识别领域应用广泛的神经网络模型。它的设计灵感来自于小波变换的多尺度分析特性…

pyCharm新建项目

1.新建界面点击Create New Project。 或点击File->New Project... 2.选择Pure Python后&#xff0c;如图选择路径。 Location的地址一致&#xff0c;点击Create。 3.等待新建成功后&#xff0c;在新建的项目名字右击&#xff0c;如下图可以选择新建文件夹、python包和python…

信息检索与数据挖掘 | 【实验】检索评价指标MAP、MRR、NDCG

文章目录 &#x1f4da;实验内容&#x1f4da;知识梳理&#x1f4da;实验步骤&#x1f407;前情提要&#x1f407;MAP评价指标函数&#x1f407;MRR 评价指标函数&#x1f407;NDCG评价指标函数&#x1f407;调试结果 &#x1f4da;实验内容 实现以下指标评价&#xff0c;并对…

Acrobat Pro DC 2023 中文版

Acrobat Pro DC 2023是PDF编辑和管理软件&#xff0c;具有以下优点&#xff1a; 更好的安全性&#xff1a;Acrobat Pro DC 2023采用了新的安全功能&#xff0c;包括加密、数字签名等&#xff0c;可以更好地保护PDF文件的安全性。 更高的速度和性能&#xff1a;Acrobat Pro DC …

OpenCV入门——图像视频的加载与展示一些API

文章目录 OpenCV创建显示窗口OpenCV加载显示图片OpenCV保存文件利用OpenCV从摄像头采集视频从多媒体文件中读取视频帧将视频数据录制成多媒体文件OpenCV控制鼠标关于[np.uint8](https://stackoverflow.com/questions/68387192/what-is-np-uint8) OpenCV中的TrackBar控件TrackBa…

Python小白之PyCharm仍然显示“No module named ‘xlwings‘”

Python小白之“没有名称为xlwings‘的模块”-CSDN博客文章浏览阅读8次。cmd 打开命令行&#xff0c;输入python出现>>>的提示格&#xff0c;输入import xlwings 回车&#xff0c;正常报错&#xff1a;No module named xlwings。输入python 回车后&#xff0c;再输入im…

黑客帝国中的黑客如何隐藏自己的IP,你不可不知的正向代理和反向代理

文章目录 前言正向代理常用使用场景VPN动态 IP 代理隐藏客户端 IP 反向代理使用场景堡垒机nginx 负载均衡 动态 IP 代理实现分类按匿名分类按成本分类按协议分类 原理nodeJs 简单实现 总结个人简介 前言 hello&#xff0c;大家好&#xff0c;我是 Lorin &#xff0c;今天给大家…

c# 字符串转化成语音合成,System.Speech

C# 语音合成可以使用 System.Speech.Synthesis 命名空间中的 SpeechSynthesizer 类来实现。SpeechSynthesizer 类提供了一系列方法和属性&#xff0c;可以用来控制语音合成的过程&#xff0c;包括设置语音、音调、语速等。 下面是一个简单的示例&#xff0c;用来演示如何使用 …

SpringBoot写接口小记 以及 几个层的功能总结(自用 勿喷)

目录 Entity层&#xff1a;实体层 数据库在项目中的类 Mapper层&#xff1a; 持久层 主要与数据库进行交互 Service层&#xff1a;业务层 控制业务 Controller层&#xff1a;控制层 控制业务逻辑 Entity层&#xff1a;实体层 数据库在项目中的类 Entity层是实体层&#xff…

WP光电信息学院2023年网络安全季度挑战赛-测试赛

签个到就跑WP Misc MISC-没爱了&#xff0c;下一个 下载附件压缩包解压之后&#xff0c;获得一个流量包文件 使用wireShark打开流量包&#xff0c;Ctrl F 搜索flag{即可获得flag flag{Good_b0y_W3ll_Done}MISC-送你一朵小花花 下载附件压缩包解压之后&#xff0c;获得一…

模电的100个公式

文章目录 1.晶体二极管的伏安特性2.二极管的钳位电路&#xff08;τRC&#xff0c;放电时间等于5τ&#xff09;3.晶体三极管4.绝缘型FET场效应管&#xff08;MOS管&#xff0c;4种&#xff0c;P/N沟道&#xff0c;增强型/耗尽型&#xff09;CMOS和VMOSMOS管的特性曲线&#xf…

SQL练习---619.出现一次的最大数字

题目 分析 首先确定表的来源只有一个表数字表&#xff0c;再者判断他是不是单一数字&#xff0c;&#xff08;想到的是直接按数字分组&#xff0c;通过count函数来判断是否为单一数子&#xff09;&#xff0c;然后求最大值。 题解 select Max(num) as num from MyNumbers wh…

服务号转订阅号如何操作

服务号和订阅号有什么区别&#xff1f;服务号转为订阅号有哪些作用&#xff1f;一、文章推送的篇数不同服务号在文章的推送篇数上是有所限制的&#xff08;每月推4次&#xff09;订阅号则每天可推送一篇文章。二、定义不同服务号主要是为关注用户提供服务使用的&#xff1b;订阅…

Class 7: MMDetection代码课

Class7&#xff1a; MMDetection代码课 文章目录 Class7&#xff1a; MMDetection代码课[toc]依赖&安装依赖 数据集准备RTMDetConfig模型配置数据集和评测器配置训练和测试的配置优化相关配置 训练测试以及推理可视化分析特征图可视化Grad-Based CAM 可视化 检测新趋势总结…