【问题标题】:Algorithm for 2D nearest-neighbour queries with dynamic points具有动态点的二维最近邻查询算法
【发布时间】:2018-02-26 09:28:12
【问题描述】:

我正在尝试找到一种快速算法,用于在二维空间中查找给定点的(近似的,如果需要的话)最近邻居,其中点经常从数据集中删除并添加新点。

(与此相关,这个问题有两种变体让我感兴趣:一种可以认为点是随机添加和删除的,另一种是所有点都在不断运动。)

一些想法:

  • kd-trees 提供了良好的性能,但仅适用于静态点集
  • R*-trees 似乎为各种维度提供了良好的性能,但其设计的通用性(任意维度、一般内容几何)表明更具体的算法可能会提供性能优势
  • 具有现有实现的算法更可取(尽管这不是必需的)

这里有什么好的选择?

【问题讨论】:

标签: algorithm data-structures 2d computational-geometry nearest-neighbor


【解决方案1】:

我同意(几乎)@gsamaras 所说的一切,只是补充几点:

  • 根据我的经验(使用 >= 500,000 点的大型数据集),KD-Trees 的 kNN 性能比几乎任何其他空间索引差 10 到 100 倍。我测试了它们(2 个 KD-trees 和各种其他索引)在大型 OpenStreetMap 数据集上。在下图中,KD-Trees 称为 KDL 和 KDS,2D 数据集称为 OSM-P(左图): 该图取自this document,有关详细信息,请参阅下面的要点。李>
  • This research 描述了一种移动对象的索引方法,以防您在稍微不同的位置继续(重新)插入相同的点。
  • 四叉树也不错,它们在 2D 中可以非常快,对于
  • 如果您正在寻找 Java 实现,请查看我的index library。 In 实现了四叉树、R-star-tree、ph-tree 等,所有这些都具有一个也支持 kNN 的通用 API。该库是为TinSpin 编写的,这是一个用于测试多维索引的框架。一些结果可以在enter link description here 找到(它并没有真正描述测试数据,但“OSM-P”结果基于具有多达 50,000,000 个 2D 点的 OpenStreetMap 数据。
  • 根据您的情况,您可能还需要考虑PH-Trees。对于 kNN 查询,它们似乎比低维 R-Trees 慢(尽管仍然比 KD-Trees 快),但它们的删除和更新速度比 RTrees 快。如果您有很多移除/插入,这可能是一个更好的选择(参见TinSpin results,图 2 和 46)。 C++ 版本提供herehere

【讨论】:

    【解决方案2】:

    查看Bkd-Tree,即:

    一种基于 kd-tree 的 I/O 高效动态数据结构。 [..] Bkd-tree 保持其高空间利用率和出色的 查询和更新性能而不管对其执行的更新次数。

    然而,这种数据结构是多维的,并不专门用于低维(如 kd-tree)。

    bkdtree 玩它。


    Dynamic Quadtrees也可以是候选,查询时间为O(logn),插入/删除时间为O(Q(n)),其中Q(n)为时间 在使用的数据结构中执行查询。请注意,此数据结构专门用于 2D。然而,对于 3D,我们有八叉树,并且以类似的方式可以将结构推广到更高的维度。

    一个实现是QuadTree


    R*-tree 是另一种选择,但我同意你的一般性。 r-star-tree 的实现也存在。


    Cover tree 也可以考虑,但我不确定它是否符合您的描述。阅读更多here,并在CoverTree 上查看实现。


    Kd-tree 仍应考虑,因为它在二维上的性能非常出色,并且其插入复杂度在大小上是对数的。

    nanoflannCGAL 是它的两个实现,第一个不需要安装,第二个需要,但可能性能更高。


    无论如何,我都会尝试不止一种方法和基准测试(因为它们都有实现,而且这些数据结构通常会受到您的数据的性质的影响)。

    【讨论】:

    • 我对这些算法的问题是它使用点,如果我存储具有实际尺寸的对象,因此可能与四叉树网格或 KD 树的分隔线重叠 - 没有一个例子解释了这一点复杂性。
    猜你喜欢
    • 2011-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-17
    • 1970-01-01
    • 1970-01-01
    • 2020-09-10
    • 2016-04-19
    相关资源
    最近更新 更多