我在多维空间中有大量点。而且我想为任何给定点找到几个邻居(在附近)(要求是避免扫描所有点)。
我想知道我的解决方案是否合适:
预处理:
- 定义一组正交轴
- 对每个轴上的每个点进行投影
- 每个投影都与其到轴起点的距离(键)和点的标识符(值)相关联。索引投影- 将它们全部放入排序集(例如树集)
dist = distance of projection to the start point of axis point_num = number of point sorted_set.put( dist, point_num )
要查找任何给定点的邻居:
- 找到它在每个轴上的投影
- 使用 idex - 在每个 exis 上找到最近的投影
- 寻找实际的邻居——所有结果的交集
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 )
这是一个简单的例子:
相交[2, 4, 1]
并[4, 5]
产生答案[4]
请指出我,如果我在算法中犯了任何错误
谢谢