如何找到距给定点的距离小于或等于整数n的所有数字

时间:2019-02-04 18:08:10

标签: search tree computer-science nearest-neighbor

给定了一组点D和一些数字K,我想找到D中所有的数字,使得K与任何找到的数字之间的距离小于或等于整数N?

示例: 假设我们有D = {5,9,0,6,7}且K = 8且N = 1,则结果应为{9,7}

我当时正在考虑使用k-d树或VP树,但据我了解(如果我错了,请纠正我)找到最近的邻居,并且不在乎示例中的N。

1 个答案:

答案 0 :(得分:0)

总结所有评论:

解决此问题,因为蛮力将花费O(n)的时间遍历D中的每个元素,并检查其与k的距离是否小于n

您有大数据集,但查询很多,最好对D进行预处理(使用O(nlogn),然后可以将D排序为pre,从而在O(logn)->中得到答案。 -processes(在O(nlogn)中为酒窝类型的数组。

现在,在给定查询中搜索k-注意,如果缺少该数字,则二进制搜索将停止,但这样做将停止在最接近的值。从该索引开始扩展到D的两侧,并且对于每次检查是否仍在n范围内。请注意,由于其中包含O(|output|),因此传播范围允许。

在您的示例中:对D进行排序,得出:[0,5,6,7,9]。尝试查找k=8会得出false,但索引为3或4(取决于实现)。假设是返回索引3。对于3到最后一个索引,请检查arr[i] - k < n是否打印-如果更大停止。对于另一面,请检查k - arr[i] < n-如果这样打印,或者更大的 stop ->这将为您提供7,9

希望有帮助!