找到大集合中最近的邻居

时间:2013-02-15 14:40:17

标签: algorithm search indexing computational-geometry knn

我在多维空间中有很多点。而且我想在任何给定点找到几个邻居(在附近区域内)(要求是避免扫描所有点)。

我想知道我的解决方案是否合适:

预处理:

  1. 定义 ortogonal axises
  2. 的集合
  3. 对每个轴上的每个点进行投影
  4. 每个投影与其距轴(键)的起点和点(值)的标识符的距离相关联。 索引预测 - 将所有这些内容放入有序集(例如树集)
  5. dist = distance of projection to the start point of axis
    point_num = number of point 
    sorted_set.put( dist, point_num )
    

    找到任何给定点的邻居:

    1. 在每个轴上查找其投影
    2. 使用idexes - 在每个exis上找到最近的投影
    3. 查找所有结果的实际邻居相交
    4. dx = radius of neighborhood (some constant) 
      
      dist_1 = distance of projection of given point to start point of axis_1 
      list_1 = sorted_set_1.get_sub_set( dist_1 - dx, dist_1 + dx )
      
      dist_2 = distance of projection of given point to start point of axis_2
      list_2 = sorted_set_2.get_sub_set( dist_2 - dx, dist_2 + dx ) 
      
      return intersection_of( list_1, list_2 )
      

      这是一个简单的例子:

      enter image description here

      相交[2, 4, 1][4, 5]会产生回答[4]

      请指出,如果我在算法中犯了任何错误

      由于

1 个答案:

答案 0 :(得分:1)

您尚未向我们提供有关如何构建实际邻居集的说明,在本例中为[2, 4, 1][4, 5]。你为什么从一个索引中选择3个元素而从另一个索引中选择2个元素?

你还说你想找几个邻居。有多少是或者应该是你的功能的输入?在示例中,您只找到一个,算法应该决定您想要多少?

如果所有点都在您的某个轴上的一条线上,会发生什么?然后一组确定包含所有元素。