STR-R树
R树
R-tree
是一种具有层次结构的数据结构派生自B-tree
,是为了相交查询而设计的。R-tree
存储了一个矩形的集合,这个集合可以通过插入和删除操作在任意时间更改。对于任意的图形对象,通过其最小外接矩形来表示。对于二维及以上的情形,R-tree
非常容易建立。
R-tree
中的每个节点最多存储个条目。每个条目包含一个矩形和一个指针,对于叶等级的节点,R是一个范围,通过指针P来定向。在内部节点中,是子树中存储的所有矩形的公共外接矩形,通过指向。值得注意的是,穿过树的任意路径都应该是一系列嵌套的矩形,最后一个包含实际的数据对象。同时还要注意,任意层级的矩形都可能会压盖,此外,通过任一对象集创建的R树绝不是是唯一的。
对于执行的一次查询,与查询区域相交的所有矩形都要被检索并检验。这个检索过程是通过一个简单的递归过程来完成的,该递归过程始于根节点,并且沿着树的几个不同路径执行。对于某个节点,首先检索存储在这个节点的所有与区域相交的矩形。如果节点是个内部节点,则通过递归搜索检索到与检索到的矩形相对应的子树。否则,这个节点是叶节点,检索到的矩形就可以很方便的得到。
Packing Alogrithms
一般过程
预处理数据文件,处理后有:个矩形,排序后,分别保存在个连续的的分组(每个含有个矩形),每个组中的矩形被计划放入叶级节点中。注意,最后一组中可能少于个矩形。
将这个矩形组加载进页面并且输出每个叶级页面的
MBR
和页码进入一个临时文件。页码被用做更高级别的节点中的子指针。递归打包这些
MBR
进下一级的节点,向上执行,直到根节点被创建。
对于不同的打包算法,这三个步骤只在每个层级矩形如何排序中有所不同。
Nearest-X
矩形使用x坐标排序。
Hilbert Sort
矩形使用Hilbert
(分型)空间填充曲线。排序时使用的矩形中心点沿曲线到原点的距离。这决定了矩形放入R-tree
中节点的顺序。
Sort-Tile-Recursive
考虑一个维数据集包含个超矩形。一个超矩形被个由组成的intervals
,点的位置为第个坐标落在地i个interval
内。
预设item
个数为,每个叶级节点的容量为
STR最适合处理维的情形。相应的,我们想象平面上有一组矩形。首先,假设一维空间,若每个节点容量为,则可以划分个叶级节点,类比后我们用个垂直切片切分数据空间,这样,每个切片可以包含足够的矩形来满足大约个节点容量。接下来,我们设想矩形的中心点作为坐标,确定了叶级页面的数量,令。用坐标排序,并将他们分配到个垂直分组中。每个切片中包含排序列表中的一连串的个连续的矩形。注意最后一个切片可能矩形的数量会比少。之后,再将切片中的矩形按照坐标排序并将它们个一组打包插入叶级节点。
Last updated
Was this helpful?