如何找到从给定的点有距离是小于或等于整数n的所有号码

问题描述 投票:1回答:1

给定的一组点d和若干K I要发现在d使得K和任何数目发现之间的距离小于或等于整数n的所有数值?

例如:假设我们有d = {5,9,0,6,7}和K = 8和N = 1,则结果应该是{9,7}

我想用K-d树或树VP但都按照我的理解(纠正我,如果我错了,请)找到最近的邻居,在我的例子不关心ñ。

search tree computer-science nearest-neighbor
1个回答
0
投票

综合上述的评论:

解决这个问题,因为蛮力将采取O(n)时间为d的每个元件上的迭代,并检查是否从k其距离小于n

你有大的数据集,但有大量的查询,最好是做预处理的d(与O(nlogn)和你可以在O(logn)了答案 - 通过排序d作为前处理(在O(nlogn)作为酒窝样阵列的>。

现在,在给定的查询搜索k - 请注意,如果失踪人数二进制搜索将停止,但他做的最接近的值停止。从指数开始蔓延到d的两侧和每个检查,如果仍然n范围。注意在蔓延允许,因为它是包括O(|output|)的。

在您的例子:排序D产量:[0,5,6,7,9]。尝试寻找k=8会给假,但指数3或4(依赖于实现)。我们说的是回报指数3. 3到最后的索引检查,如果arr[i] - k < n如果是打印 - 如果更大停止。换另一侧检查k - arr[i] < n - 如果这样打印,如果较大的车站 - >这会给你7,9

希望帮助!

© www.soinside.com 2019 - 2024. All rights reserved.