数据结构中的希尔伯特树


希尔伯特R树,一种R树的变体,被定义为多维对象的索引,例如线、区域、3D对象或基于高维特征的参数对象。可以将其想象为B+树在多维对象上的扩展。

R树的性能取决于对节点上的数据矩形进行聚类的算法的质量。希尔伯特R树实现空间填充曲线,特别是希尔伯特曲线,以便对数据矩形施加线性排序。

希尔伯特R树有两种类型:一种用于静态数据库,另一种用于动态数据库。在这两种情况下,都实现希尔伯特空间填充曲线以实现节点中多维对象的更好排序。这种排序必须被视为“良好”,因为它应该将“相似”的数据矩形组合在一起,以减少生成的最小边界矩形 (MBR) 的面积和周长。打包的希尔伯特R树适用于更新非常少或根本没有更新的静态数据库。

基本思想

虽然下面的例子是针对静态环境的,但它讨论了良好R树设计的直观原则。这些原则对静态和动态数据库都适用。

Roussopoulos和Leifker提出了一种构建打包R树的技术,该技术实现了近100%的空间利用率。

该思想是根据矩形的一个角的x或y坐标对数据进行排序。对四个坐标中的任何一个进行排序都会得到相同的结果。在这个讨论中,点或矩形都根据矩形左下角的x坐标进行排序,记为“lowx打包R树”。扫描矩形的排序列表;将连续的矩形分配给相同的R树叶节点,直到该节点满为止;然后构建一个新的叶节点,并继续扫描排序列表。因此,生成的R树的节点将被完全打包,除了每个级别上的最后一个节点可能例外。这导致空间利用率≈100%。树的较高层次以类似的方式构建。

希尔伯特打包算法

(将矩形打包到R树中)

步骤1. 计算每个数据矩形的希尔伯特值。

步骤2. 按升序希尔伯特值对数据矩形进行排序。

步骤3. /* 创建叶节点 (级别l=0) */

  • 当 (还有更多矩形)
  • 生成一个新的R树节点
  • 将接下来的C个矩形分配到此节点

步骤4. /* 创建更高级别的节点 (l + 1) */

  • 当 (级别l上有>1个节点)
  • 按升序创建时间对级别l≥0的节点进行排序
  • 重复步骤3

这里的假设是数据是静态的,或者修改频率很低。这是一种简单的启发式方法,用于构建空间利用率约为100%的R树,同时具有良好的响应时间。

更新于:2020年1月8日

542 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告