【问题标题】:what is the best R tree variant什么是最好的 R 树变体
【发布时间】:2016-01-03 22:25:55
【问题描述】:

我最近正在阅读有关 R-tree 及其变体的论文和代码:线性、二次、R*-tree 以及 R 树打包 (STR)。在我看来,不同的技术在树创建、范围搜索和 knn 搜索的时间复杂度上是不同的。 STR 树似乎比其他树好。然而,这些论文是上个世纪的。我只是想知道近 20 年后,目前最好的 R-tree 变体是什么?

【问题讨论】:

    标签: spatial-index r-tree


    【解决方案1】:

    另一棵较新的树是X-tree(同样基于 R-Tree)。

    如果您正在寻找通用空间索引,而不仅仅是 R-Tree,我可以推荐 PH-Tree。它可以轻松地与 R-Tree 变体进行矩形或范围查询竞争,具有相当好的 kNN 查询支持(仅比 Cover-Tree 在 21 维上慢 50%),它可以很好地扩展大型和/或集群数据集,并且是相当节省空间。最好的可能是它具有出色的更新性能,插入/移动/删除几乎不比查找长。另一个优点是它不需要重新平衡,这意味着不会有超过 2 个节点受到任何更新的影响。

    缺点:

    • 低维的实现相当复杂,但如果您对 Java 实现满意,here is mine
    • 对于 10 维以下的高维实现不太复杂,但速度较慢,here
    • 它最喜欢集群数据,但对于分布更均匀的数据,性能仍然可以。

    【讨论】:

      【解决方案2】:

      R*-trees 被证明工作得很好,并且继续成为首选变体。

      批量加载技术(如 STR)是很好的补充,可以更快(更好)地构建 initial 树,而不是一个一个地插入对象。

      所以通常情况下,您需要一个具有 STR 批量加载的 R*-tree。

      【讨论】:

      • 谢谢! STR 批量加载创建的树是否比原始 R* 获得更好的 KNN/Rangesearch 性能(时间复杂度)?
      • 是的,批量加载的树通常会更好地使用磁盘空间。但请注意,实施很重要。我也见过非常慢的“STR”R-trees。
      猜你喜欢
      • 2010-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-29
      • 2010-11-22
      • 1970-01-01
      • 1970-01-01
      • 2011-11-28
      相关资源
      最近更新 更多