LHV

本文是对On packing R-tree的一种补充,主要是在原先的Hilbert R-tree基础上提出了Largest Hilbert Value (LHV),即最大希尔伯特值

对此原先的Hilbert R-tree结构有稍许变化:

对于叶节点,基本保持不变,对于一个最多包含C条记录的叶节点,每个记录结构为 (R, obj_id)

其中R为对应的MBR,对于二维数据可表示为一个四元组 (xlow, xhigh, ylow, yhigh)

obj_id即为指向具体数据对象的指针

对于非叶节点,每个记录结构为(R, ptr, LHV)

其中R为对应MBR,ptr为指向子结点的指针,LHV为被该结点对应MBR包围的子节点中的最大希尔伯特值 (LHV is the largest Hilbert value among the data rectangles enclosed by R)

按这种方式构造的Hilbert R-tree如下:

Hilbert R-tree: An Improved R-tree Using FractalsHilbert R-tree: An Improved R-tree Using Fractals

对于LHV为107的非叶节点,其中包含三个子节点,Hilbert值分别为92,98和107

使用LHV的好处在于可以使用针对一维数据的排序方法,如图中第一个非叶节点下的子节点,其Hilbert值一定小于等于33,中间的非叶节点下的子节点,其Hilbert值一定小于等于107,又一定大于33. 若得知某区域的LHV,可以快速定位该结点的位置

Overflow handling

文章中还研究了当结点溢出时的分裂方式。当一个结点溢出分裂为两个结点时,我们称其为1-to-2 splitting policy

对于s-to-(s+1) splitting policy, 当某个结点要溢出时,我们可以先不马上分裂,而是查看其剩下的s-1个兄弟结点是否空闲

若空闲则将这个结点的部分记录分配给s-1个结点,且尽量使得s个结点的记录数均匀

若s-1个兄弟结点都满了,则新建一个结点,再执行类似的操作,对应的伪代码如下:

Hilbert R-tree: An Improved R-tree Using Fractals

文章对某些分裂方法做了实验,结果如下:

Hilbert R-tree: An Improved R-tree Using FractalsHilbert R-tree: An Improved R-tree Using FractalsHilbert R-tree: An Improved R-tree Using Fractals

其中空间利用率显然会越来越高,但是对于插入查询等操作的磁盘访问次数也会增加,因此综合这两点,作者认为2-to-3 split policy是最佳的

相关文章:

  • 2022-12-23
  • 2021-10-12
  • 2022-12-23
  • 2022-12-23
  • 2021-11-26
  • 2022-12-23
  • 2021-07-13
  • 2021-11-08
猜你喜欢
  • 2021-08-23
  • 2021-06-19
  • 2021-06-05
  • 2021-11-04
  • 2021-12-28
  • 2021-11-30
相关资源
相似解决方案