【发布时间】:2016-01-03 22:25:55
【问题描述】:
我最近正在阅读有关 R-tree 及其变体的论文和代码:线性、二次、R*-tree 以及 R 树打包 (STR)。在我看来,不同的技术在树创建、范围搜索和 knn 搜索的时间复杂度上是不同的。 STR 树似乎比其他树好。然而,这些论文是上个世纪的。我只是想知道近 20 年后,目前最好的 R-tree 变体是什么?
【问题讨论】:
标签: spatial-index r-tree
我最近正在阅读有关 R-tree 及其变体的论文和代码:线性、二次、R*-tree 以及 R 树打包 (STR)。在我看来,不同的技术在树创建、范围搜索和 knn 搜索的时间复杂度上是不同的。 STR 树似乎比其他树好。然而,这些论文是上个世纪的。我只是想知道近 20 年后,目前最好的 R-tree 变体是什么?
【问题讨论】:
标签: spatial-index r-tree
另一棵较新的树是X-tree(同样基于 R-Tree)。
如果您正在寻找通用空间索引,而不仅仅是 R-Tree,我可以推荐 PH-Tree。它可以轻松地与 R-Tree 变体进行矩形或范围查询竞争,具有相当好的 kNN 查询支持(仅比 Cover-Tree 在 21 维上慢 50%),它可以很好地扩展大型和/或集群数据集,并且是相当节省空间。最好的可能是它具有出色的更新性能,插入/移动/删除几乎不比查找长。另一个优点是它不需要重新平衡,这意味着不会有超过 2 个节点受到任何更新的影响。
缺点:
【讨论】:
R*-trees 被证明工作得很好,并且继续成为首选变体。
批量加载技术(如 STR)是很好的补充,可以更快(更好)地构建 initial 树,而不是一个一个地插入对象。
所以通常情况下,您需要一个具有 STR 批量加载的 R*-tree。
【讨论】: