给定的一组点d和若干K I要发现在d使得K和任何数目发现之间的距离小于或等于整数n的所有数值?
例如:假设我们有d = {5,9,0,6,7}和K = 8和N = 1,则结果应该是{9,7}
我想用K-d树或树VP但都按照我的理解(纠正我,如果我错了,请)找到最近的邻居,在我的例子不关心ñ。
综合上述的评论:
解决这个问题,因为蛮力将采取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
希望帮助!