Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 在大集合中查找近邻集_Algorithm_Search_Indexing_Computational Geometry_Knn - Fatal编程技术网

Algorithm 在大集合中查找近邻集

Algorithm 在大集合中查找近邻集,algorithm,search,indexing,computational-geometry,knn,Algorithm,Search,Indexing,Computational Geometry,Knn,我在多维空间中有很多点。我想为任何给定的点找到几个邻居(在邻域内)(要求避免扫描所有点) 我想知道我的解决方案是否合适: 预处理: 定义一组或正交轴 对每个轴上的每个点进行投影 每个投影都与其到轴(关键点)起点的距离和点(值)的标识符相关联索引投影-将所有投影放入排序集(例如树集) 要查找任意给定点的邻居,请执行以下操作: 找到它在每个轴上的投影 使用IDEX-在每个exis上查找最近的投影 要查找实际邻居-所有结果的交集 下面是一个简单的例子: 将[2,4,1]和[4,5]相交生成答案[4]

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

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

预处理:

  • 定义一组或正交轴
  • 对每个轴上的每个点进行投影
  • 每个投影都与其到轴(关键点)起点的距离和点(值)的标识符相关联索引投影-将所有投影放入排序集(例如树集)
  • 要查找任意给定点的邻居,请执行以下操作:

  • 找到它在每个轴上的投影
  • 使用IDEX-在每个exis上查找最近的投影
  • 要查找实际邻居-所有结果的交集
  • 下面是一个简单的例子:

    [2,4,1]
    [4,5]
    相交生成答案
    [4]

    如果我的算法有任何错误,请告诉我


    谢谢

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

    你还说你想找几个邻居。多少是几个,还是应该作为函数的输入?在这个例子中,你只找到一个,算法是否应该决定你想要多少


    如果所有点都在一条轴上的一条线上,会发生什么情况?那么一个集合肯定包含所有元素。

    您还没有向我们说明如何构建实际的邻居集合,在本例中是
    [2,4,1]
    [4,5]
    。为什么从一个索引中选择3个元素,从另一个索引中选择2个元素

    你还说你想找几个邻居。多少是几个,还是应该作为函数的输入?在这个例子中,你只找到一个,算法是否应该决定你想要多少


    如果所有点都在一条轴上的一条线上,会发生什么情况?然后一个集合肯定包含所有元素。

    我在问题中嵌入了一些伪代码。例如,对于索引,可以使用红黑树-它们允许在O(lg(N))时间内找到邻域内的键。例如,对于索引,可以使用红黑树-它们允许在O(lg(N))时间内找到邻域内的关键点。“2.在每个轴上投影每个点”如何避免像您所需要的那样扫描所有点?预处理只需执行一次(复杂性为O(N*lg(N))在红黑树作为索引的底层结构的情况下),所以这对我来说不是问题。但是寻找邻居是非常频繁的操作,所以我不想每次都扫描所有的点,当为每个给定的点寻找邻居时。你看过K-D树吗?是的,谢谢。但我想知道,我的解决方案是否合适(因为它与K-D树具有相同的复杂性)。是否有我的解决方案无法解决的情况?您的任务通常使用n维四叉树(oct树)来解决。有一整本1000页的书:Hannan Sammet:Foundations of Dimensional search structuresHow做了“2.在每个轴上投影每个点”避免像你所需要的那样扫描所有点?预处理只需进行一次(复杂度为O(N*lg(N)),如果红黑树作为索引的底层结构)-所以这对我来说不是问题。但是寻找邻居是非常频繁的操作,所以我不想每次都扫描所有的点,当为每个给定的点寻找邻居时。你看过K-D树吗?是的,谢谢。但我想知道,我的解决方案是否合适(因为它与K-D树具有相同的复杂性)。是否有我的解决方案无法解决的情况?您的任务通常使用n维四叉树(oct树)来解决。有一整本1000页的书:《汉南·萨米特:多维搜索结构的基础》
    dist = distance of projection to the start point of axis
    point_num = number of point 
    sorted_set.put( dist, point_num )
    
    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 )