【问题标题】:How does space partitioning algorithm for finding nearest neighbors work?寻找最近邻的空间划分算法如何工作?
【发布时间】:2010-12-15 09:14:21
【问题描述】:

为了找到最近的邻居,Space Partitioning 是其中一种算法。它是如何工作的?

假设我有一组 2D 点(x 和 y 坐标),并且给定一个点 (a,b)。这个算法如何找到最近的邻居?

【问题讨论】:

    标签: algorithm nearest-neighbor space-partitioning


    【解决方案1】:

    空间分割实际上是一系列密切相关的算法,它们对空间进行分割,以便应用程序可以更轻松地处理点或多边形。

    我认为有很多方法可以解决您的问题。我不知道您愿意构建您的解决方案有多复杂。一种简单的方法可能是构建一棵二叉树,将空间分成 2。所有点都划分在某个中间平面之间。通过递归细分直到用完点来构建树。

    搜索最近的邻居将被优化,因为树的每次遍历都会缩小搜索区域。

    在一些文献中,他们称之为kd tree

    【讨论】:

    • 假设我有积分(0,0), (1,2),(1,0),(-1,0),给出的积分是(2,2)。那么该算法将如何工作?我读过它,但我不确定如何进行分区和树遍历。如果 oyu 可以解释你在这个小例子中提到的内容,那将会很有帮助。谢谢。
    • 计算X和Y的范围。本例中X的范围是-1到2,Y的范围是0-2。树的根是中间的,大概是(1.5,1)。将所有点分成由根分割的组。然后对每个组执行相同的操作,将它们拆分得更多。树的叶子将是单独的点。然后,您可以通过遍历树检查每个节点与您的点来找到关闭点,直到找到最接近的点。
    • 但在这种情况下,您必须将(2,2) 与其他所有节点进行比较,它将以线性时间运行。那么,那这棵树有什么用呢?
    • 您将尝试路径上的每个节点,而不是树中的每个节点。因此,您的搜索空间被修剪并且比针对所有点的测试要小得多。我的猜测是它将以对数时间运行(因为每个深度只会尝试一个节点)而不是线性时间。
    • 正确。遍历树时,您可以安全地忽略不在搜索区域中的节点分支。在这个例子中,因为只有 5 个点,所以没那么有用。在具有数百万个顶点的 3D 应用程序中,像这样的树对于处理场景至关重要
    【解决方案2】:

    这两个视频应该会有所帮助:

    【讨论】:

      猜你喜欢
      • 2011-03-12
      • 2018-05-19
      • 2011-02-07
      • 2020-09-10
      • 2021-02-21
      • 2016-01-08
      • 2018-11-05
      • 2011-06-24
      • 1970-01-01
      相关资源
      最近更新 更多