最近点,最近点到线

时间:2013-03-27 21:40:27

标签: algorithm geometry complexity-theory theory computational-geometry

想象一下2D平面中的一组m点,称为“候选者”。然后是两种情况之一:

  • 还有一组n点(“对象”) - 见图1

  • 还有一组与X或Y轴(“对象”)共线的n行 - 见图2

我想知道哪个候选对象对具有所有对中最短的笛卡尔距离。

拜托,有没有人知道这个问题在计算几何中是否有名称?是否有比O(m * n)快的算法?如果对象保持不变,只有候选者改变 - 通过一些聪明的预计算,它是否可能比O(m * n)更快?

图。 1

              c      o
       c
                          o         c      o
           o    c
                             c
              c o              
                       c             o
                                          c
               o                 c
          c

图。 2

             |                      c           |  
-------------+----------------------------------+------  
             |                                  |  
             |              c                   |    c  
             c                                  |  
             |                                  |  
-------------+----------------------------------+------  
             |          c            c          |  
-------------+----------------------------------+------  
             |                            c     |  

4 个答案:

答案 0 :(得分:1)

这基本上是对所有候选人的最近邻搜索。您可以使用kd tree索引加快这些类型的问题。

答案 1 :(得分:0)

我不知道如何从对象创建线条。对于每个对象,您创建两条线:一条是垂直线,一条是水平线,是吗?

在任何情况下,假设您有垂直线v1,v2,..,va和水平线h1,h2,...,hb。

根据x轴偏移和水平线根据y轴偏移对垂直线进行排序。

对于候选集中的每个点,进行二分搜索以获得最近的垂直和水平线。现在,如何计算最接近的(候选者,线)对,这是微不足道的。

答案 2 :(得分:0)

您正在寻找的名称很可能是NNS(请参阅:http://en.wikipedia.org/wiki/Nearest_neighbor_search),如果为一组静态“对象”预先计算一些时间和空间,应该可以比O更快地执行搜索(N * M)。

即使使用最简单的构建二叉搜索树的方法,您也应该能够将单个查找的时间复杂度降低到O(log n),导致整个问题的O(m log n)。 / p>

答案 3 :(得分:0)

你有两个1d问题而不是一个2d。 在x和y轴上投射所有'condidates',然后将垂直'对象'放在x轴上,水平放在y上。

瞧!两个1d问题。

现在是1d。

将所有'condidates'放入已排序的数组中,因为每个'对象'都使用二进制搜索来查找该数组中包含的段(两个最接近的'condidates')。

结果为O(n log m + n log n)