R树简介

article/2025/9/29 19:27:52

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树

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

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

这里写图片描述

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

R树的操作

插入

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

删除

R树的删除操作将被删除的结点直接抹去。如果剩余结点少于结点最大度的40%,则下溢,需要将剩余的结点放入重插列表。
这里写图片描述
这里写图片描述

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


http://chatgpt.dhexx.cn/article/ug6j6hyg.shtml

相关文章

高级数据结构之R树(R-tree)

R树(R-tree)是一种将B树扩展到多维情况下得到的数据结构,它最初由Antonin Guttman于1984年提出。B树的结点中会存储一个键的集合,这些键把线分成片段,沿着那条线的点仅属于一个片段。因此,B树使得我们可以很容易地找到点。如果把沿线各处的点表示成B树结点,我们就能…

什么是R树?

什么是R树&#xff1f; R树是用来做空间数据存储的树状数据结构。例如给地理位置&#xff0c;矩形和多边形这类多维数据建立索引。R树是由Antonin Guttman于1984年提出的。 人们随后发现它在理论和应用方面都非常实用。 在现实生活中&#xff0c;R树可以用来存储地图上的空间信…

图解R树的原理及相关操作

B 树的搜索本质上是一维区间的划分过程&#xff0c;每次搜索节点所找到的子节点其实就是一个子区间。R 树是把 B 树的思想扩展到了多维空间&#xff0c; 采用了 B 树分割空间的思想&#xff0c;是一棵用来存储高维数据的平衡树。 ​ 对于一棵 R 树&#xff0c;叶子节点所在层…

算法设计与分析-习题-动态规划法求解多段图的最短路径问题(动态规划法)

问题描述 用动态规划法求解如图所示多段图中从顶点0到9的最短路径。 问题求解 图中顶点编号已经按照多段图的分段顺序编号&#xff0c;用动态规划法求解该多段图的过程如下&#xff1a; 最后&#xff0c;得到最短的路径为0、2、6、7、9&#xff0c;费用是97。

【动态规划法】求解0/1背包问题

问题描述 有5个物品&#xff0c;其重量分别是{2, 2, 6, 5, 4}&#xff0c;价值分别为{6, 3, 5, 4, 6}&#xff0c;背包的容量为10&#xff0c;计算背包所能装入物品的最大价值。 求解思路 在0/1背包问题中&#xff0c;物品i或者被装入背包&#xff0c;或者不被装入背包&#xf…

算法设计之动态规划法

算法设计之动态规划法 一、目的二、内容1.斐波那契数列①自底向上分析解决 ②自顶向下分析解决 2.走棋盘问题分析解决 3.爬台阶问题分析解决 三、反思与总结 一、目的 1.理解动态规划法的特征(多阶段决策\最优子结构\无后效性\子问题重复) 2.理解动态规划法的求解(划分过程\逆…

【动态规划法】求解TSP问题

问题详情 求解下图所示的TSP问题&#xff0c;计算出所经过的城市编号以及最短路径值&#xff0c;城市代价矩阵如图所示&#xff1a; 求解思路 假设从顶点i出发&#xff0c;令d(i, V’ )表示从顶点i出发经过V’ 中各个顶点一次且仅一次&#xff0c;最后回到出发点&#xff08;…

动态规划法求解0/1背包问题

一、求解0/1背包问题 1、问题描述 有n个重量分别为{w1&#xff0c;w2&#xff0c;…&#xff0c;wn}的物品&#xff0c;它们的价值分别为{v1&#xff0c;v2&#xff0c;…&#xff0c;vn}&#xff0c;给定一个容量为C的背包。 设计从这些物品中选取一部分物品放入该背包的方案&…

动态规划法——多段图的最短路径

目录 动态规划法的基本思想 多段图的基本想法 代码块&#xff08;Java&#xff09; 运行结果 动态规划法的基本思想: 将大问题划分成若干个小问题进行解决&#xff0c;从而一步步获取最优解动归从上到下分析问题&#xff0c;从下到上解决问题动归与分治法相似&#xff0c;其…

强化学习——动态规划法

文章目录 前言一、动态规划法简单认识1.基本概念2.适用情况3.求解步骤4.典型案例二、值函数1.累计折扣奖励2.状态值函数3.动作值函数4.状态值函数与动作值函数的关系5.贝尔曼方程&#xff08;动态规划法核心&#xff09; 三、策略评估1.基于状态值函数评估策略2.基于动作值函数…

南邮|算法分析与设计实验二 动态规划法

目录 实验目的 实验内容 实验步骤 一、最长公共子序列 二、矩阵连乘 实验目的 加深对动态规划法的算法原理及实现过程的理解&#xff0c;学习用动态规划法解决实际应用中的最长公共子序列问题和矩阵连乘问题&#xff0c;体会动态规划法和备忘录方法的异同。 实验内容 …

动态规划--算法

1、动态规划&#xff1a;将求解问题分解成若干个子问题&#xff0c;求解子问题&#xff0c;这些子问题不是独立的 求解后的子问题都会记录到表中&#xff0c;每个子问题仅求解一次&#xff0c; 下次遇到这些子问题直接取解 自底向上的方式计算最优解 2、最优子结构&#xff…

TSP问题,动态规划法

TSP问题是指旅行家要旅行n个城市&#xff0c;要求各个城市经历且仅经历一次然后回到出发城市&#xff0c;并要求所走的路程最短。各个城市间的距离可以用代价矩阵来表示。 假设从顶点i出发&#xff0c;令d(i, V)表示从顶点i出发经过V中各个顶点一次且仅一次&#xff0c;最后…

动态规划法的基本知识

一、动态规划方法相关概念 1、20世纪50年代初美国数学家R.E.Bellman等人在研究多阶段决策过程(multistep decision process)的优化问题时&#xff0c;提出了著名的最优性原理(principle of optimality),同时&#xff0c;把多阶段过程转化为一系列单阶段问题&#xff0c;利用各阶…

动态规划法及其优化

在很多问题中&#xff0c;动态规划算法是我们的最优选择&#xff0c;比起递归算法&#xff0c;动态规划算法的时间复杂度和空间复杂度都更加优越&#xff0c;可以处理的数据规模更大。但是&#xff0c;动态优化算法的时间复杂度为O&#xff08;N*V&#xff09;&#xff0c;也就…

算法设计与分析之动态规划法

文章目录 前言一、动态规划法概述二、动态规划法设计思想三、动态规划法的基本要素四、动态规划算法的设计步骤五、动态规划法与分治法六、动态规划法与贪心法七、动态规划法示例总结 前言 大家好&#xff0c;我是一只勤勤恳恳的程序猿。本篇文章小猿将跟您分享算法设计与分析中…

算法-动态规划法

动态规划是在20世纪50年代由美国数学家贝尔曼为研究最优控制问题而提出的&#xff0c;当该方法在应用数学中的价值被大家认同以后&#xff0c;在计算机学界&#xff0c;动态规划法成为一种通用的算法设计技术用来求解多阶段决策最优化问题。 所以&#xff0c;同学们&#xff0…

动态规划算法

一 动态规划算法 动态规划(Dynamic Programming)算法的核心思想是&#xff1a;将大问题划分为小问题进行解决&#xff0c;从而一步步获取最优解的处理算法。 动态规划算法与分治算法类似。其基本思想也是将待求解问题分解成若干个子问题&#xff0c;先求解子问题&#xff0c;…

经典中的经典算法:动态规划(详细解释,从入门到实践,逐步讲解)

动态规划的重要性就不多说,直接进入正题 首先,我们看一下官方定义:定义: 动态规划算法是通过拆分问题&#xff0c;定义问题状态和状态之间的关系&#xff0c;使得问题能够以递推&#xff08;或者说分治&#xff09;的方式去解决。 动态规划算法的基本思想与分治法类似&#xf…

目标检测中的多尺度特征结合方式

目录 简述 解构物体检测各个阶段 FPN的演进 1&#xff09;无融合 2&#xff09;自上而下单向融合 a&#xff09;Faster/Master/Cascade RCNN中的FPN b&#xff09;RetinaNet中的FPN c&#xff09;Yolov3中的FPN 3&#xff09;简单双向融合 4&#xff09;复杂的双向融…