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

时间:2010-12-01 16:08:03

标签: data-structures kdtree r-tree

我查看了KD树和R树的定义。在我看来,他们几乎是一样的。

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

3 个答案:

答案 0 :(得分:91)

他们实际上是完全不同的。它们用于类似的目的(对空间数据进行区域查询),它们都是树,但这就是它们的共同点。

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

答案 1 :(得分:53)

R-treeskd-trees基于类似的想法(基于轴对齐区域的空间分区),但主要区别在于:

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

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

答案 2 :(得分:34)

this answer中未提及的两者之间的主要区别在于KD树仅在批量加载情况下有效。一旦构建,修改或重新平衡KD树是非常重要的。 R树不会受此影响。