当前位置: 首页 > 编程笔记 >

数据结构中的希尔伯特树

郭兴文
2023-03-14
本文向大家介绍数据结构中的希尔伯特树,包括了数据结构中的希尔伯特树的使用技巧和注意事项,需要的朋友参考一下

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

R树的性能取决于将数据矩形聚集在节点上的算法的质量。Hilbert R树实现了空间填充曲线,特别是Hilbert曲线,用于对数据矩形强加线性排序。

希尔伯特R树有两种类型:一种用于静态数据库,另一种用于动态数据库。在这两种情况下,均实现了希尔伯特空间填充曲线,以实现节点中多维对象的更好排序。在这种意义上,必须将“相似”的数据矩形分组在一起,以减小最终的最小边界矩形(MBR)的面积和周长,因此必须将此处理视为“良好”。压缩的希尔伯特R树适用于很少更新或根本没有更新的静态数据库。

基本思路

尽管以下示例是针对静态环境的,但它讨论了良好R树设计的直观原理。这些原则对于静态和动态数据库都是合法的。

Roussopoulos和Leifker提出了一种构建压缩R树的技术,该技术可实现几乎100%的空间利用率。

开发此想法是为了对矩形的一个角的x或y坐标上的数据进行排序。对四个坐标中的任何一个进行排序都会得到相同的结果。在本讨论中,点或矩形都在矩形左下角的x坐标上排序,称为“ lowx压缩R树”。扫描矩形的排序列表;连续的矩形被分配给相似的R树叶子节点,直到该节点已满为止;然后建立一个新的叶子节点,并继续扫描已排序列表。因此,除了每个级别的最后一个节点以外,最终的R-tree的节点都将被完全打包。这导致事件发生,从而使空间利用率≈100%。以类似的方式构建更高级别的树。

算法希尔伯特包

(将矩形包装到R树中)

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

步骤2.对升序Hilbert值的数据矩形进行排序。

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

  • 虽然(有更多矩形)

  • 生成一个新的R-tree节点

  • 分配给该节点的下一个C矩形

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

  • 虽然(级别l有> 1节点)

  • 在升序创建时对l≥0级别的节点进行排序

  • 重复步骤3

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

 类似资料:
  • 本文向大家介绍java数据结构之希尔排序,包括了java数据结构之希尔排序的使用技巧和注意事项,需要的朋友参考一下 希尔排序,也称递减增量排序算法,是插入排序的一种更高效的改进版本。希尔排序是非稳定排序算法。 希尔排序是基于插入排序的以下两点性质而提出改进方法的:         插入排序在对几乎已经排好序的数据操作时,效率高,即可以达到线性排序的效率;         但插入排序一般来说是低效的

  • 本文向大家介绍数据结构中的Robin-Hood哈希,包括了数据结构中的Robin-Hood哈希的使用技巧和注意事项,需要的朋友参考一下 在本节中,我们将了解什么是Robin-Hood哈希方案。这种散列是开放寻址的技术之一。这试图通过使用更公平的冲突解决策略来均衡元素的搜索时间。在尝试插入时,如果要在位置xi处插入元素x,并且已经在y j = x i处放置了元素y ,则两个元素中的较小者必须继续前进

  • 问题内容: 我想计算的不是字符串,而是整个数据结构的md5哈希。我了解执行此操作的方法的机制(调度值的类型,规范化字典键顺序和其他随机性,递归为子值等)。但这似乎是一种通常有用的操作,所以令我惊讶的是我需要自己动手操作。 Python中有一些更简单的方法来实现这一目标吗? 更新:建议使用酸洗,这是一个好主意,但是酸洗不能规范化字典的键顺序: 问题答案: bencode对字典进行排序,因此: 印刷品

  • 问题内容: 我想将RGB颜色立方体中的点映射到Python中的一维列表,以使颜色列表看起来美观且连续的方式。 我相信使用3D希尔伯特空间填充曲线将是实现此目的的一种好方法,但是我进行了搜索,但尚未找到解决此问题的有用资源。维基百科尤其仅提供用于生成2D曲线的示例代码。 问题答案: 本文似乎进行了相当多的讨论: 三维希尔伯特空间填充曲线清单。 引用摘要: 希尔伯特的二维空间填充曲线因其在许多应用中的

  • 哈希表(Hash Table,也叫散列表),是根据关键码值 (Key-Value) 而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。哈希表的实现主要需要解决两个问题,哈希函数和冲突解决。 哈希函数 哈希函数也叫散列函数,它对不同的输出值得到一个固定长度的消息摘要。理想的哈希函数对于不同的输入应该产生不同的结构,同时散列结果应当具有同一性(输出值尽

  • 哈希表也叫散列表,是一种非常重要的数据结构,应用场景及其丰富,许多缓存技术核心就是在内存中维护着一张巨大的哈希表。 学过Java对这个应该很熟悉,Java为数据结构中的映射定义了一个接口java.util.Map,此接口主要有四个常用的实现类,分别是 HashMap 、 Hashtable 、 LinkedHashMap 和 TreeMap ,类继承关系如下图所示: HashMap是Java程序员