KD树和R树之间有什么区别?


81

我看了KD树和R树的定义。在我看来,它们几乎是相同的。

KD树和R树之间有什么区别?

Answers:


60

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

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

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


106

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

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

37

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.