kd-tree和r-tree的区别

参考网址: https://qa.1r1g.com/sf/ask/302843271/

参考网址:https://www.codenong.com/4326332/

 

它们实际上是完全不同的.它们具有相似的用途(对空间数据进行区域查询),它们都是树木,但这就是它们的共同点.

 

  • R树是平衡的,kd树不是(除非是大量装载).这就是R树更改数据的首选原因,因为可能需要重建kd树以进行重新优化.
  • R-Trees是面向磁盘的.它们实际上在直接映射到磁盘表示的区域中组织数据.这使它们在真实数据库和内存不足操作中更有用.kd-tree是面向内存的,并且放入磁盘页面并不重要
  • R-Trees不覆盖整个数据空间.可以揭开空白区域.kd-trees总是覆盖整个空间.
  • kd-trees 二进制分割数据空间,r-trees将数据分割成矩形.二进制分裂显然是不相交的; 而r树的矩形可能重叠(实际上有时是好的,尽管有人试图最小化重叠)
  • kd-tree在内存中更容易实现,这实际上是它们的关键优势
  • R树可以存储矩形和多边形,kd树只存储点矢量(多边形需要重叠)
  • R-tree具有各种优化策略,不同的分割,批量加载,插入和重新插入策略等.

R树k d树基于类似的想法(基于轴对齐区域的空间划分),但关键区别是:

  • k中的节点 d树中的表示分离平面,而R树中的节点表示边界框.
  • k d-trees将整个空间划分为区域,而R-tree仅划分包含感兴趣点的空间子集.
  • k个 d树表示不相交的分区(点仅属于一个区域),而R树中的区域可以重叠.

(分区空间有很多类似的树结构:四叉树,BSP树,R*树等等)

 

这个答案中没有提到的两者之间的主要区别是KD树只在批量加载情况下有效.一旦构建,修改或重新平衡KD树是非常重要的.R树不会受此影响.

 

它们实际上是完全不同的。它们的作用类似(对空间数据进行区域查询),它们都是树(都属于边界体积层次结构索引家族),但这就是它们的共同点。

  • R树是平衡的,k树不是平衡的(除非批量加载)。这就是为什么使用R树来更改数据的原因,因为可能需要重建k d树才能进行重新优化。
  • R树是面向磁盘的。他们实际上是在直接映射到磁盘表示形式的区域中组织数据。这使它们在实际数据库和内存不足操作中更加有用。 k-d树面向内存,可轻松放入磁盘页面
  • 批量加载时,k-d树很优雅(赞扬SingleNegationElimination指出了这一点),而R树则更适合更改数据(尽管与静态数据一起使用时它们确实受益于批量加载)。
  • R树无法覆盖整个数据空间。可能会发现空白区域。 k-d树始终覆盖整个空间。
  • k-d-trees二进制分割数据空间,R-trees将数据分割成矩形。二进制拆分显然是不相交的。而R树的矩形可能会重叠(虽然有时会尽量减少重叠,但这实际上有时是好的)
  • k-d树在内存中更容易实现,这实际上是它们的主要优势
  • R树可以存储矩形和多边形,k树仅存储点向量(因为多边形需要重叠)
  • R树具有各种优化策略,不同的拆分,批量加载器,插入和重新插入策略等。
  • k-d树以到分离超平面的一维距离为界; R树使用到边界超矩形的d维最小距离作为边界(对于某些计数查询,它们也可以使用最大距离,以过滤出真实的正数)。
  • k-d树支持平方的欧几里得距离和Minkowski范数,而Rtrees也被证明也支持大地距离(用于在地理数据上查找近点)。

 

R树和kd树基于类似的思想(基于轴对齐区域的空间划分),但主要区别在于:

  • kd树中的节点表示分离平面,而R树中的节点表示边界框。
  • kd树将整个空间划分为区域,而R树仅将包含关注点的空间子集划分。
  • kd树表示不相交的分区(点仅属于一个区域),而R树中的区域可能重叠。

答案中未提及的两者之间的主要区别在于,KD树仅在批量加载情况下有效。构建后,修改或重新平衡KD树是不平凡的。 R树不会因此受到影响。

 

平凡问题通常指规模小,或简单,或计算复杂性低的问题;不平凡问题则是指规模大,或复杂困难,或计算复杂性高的问题。

 

posted @   someonezero  阅读(1324)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示