在XY平面中给定一组 n 点,如何确定每个点是否至少被每隔一个点隔开5个单位的曼哈顿距离小于O(n ^ 2)?
实现此目的的最佳算法是什么?
谢谢。
答案 0 :(得分:4)
按x
对点进行排序。这需要时间'O(n log(n))'。
将范围划分为宽度为10的条带。(对于病理情况,您需要注意一点,其中一个点具有x坐标1,而下一个点具有x坐标10 20 。)O(n)
对于每个条带:
O(n log(n))
。O(n)
。报告确实。
此算法为O(n log(n))
。我强烈建议你自己证明1.2中的逐点曼哈顿比较需要O(n)
次操作,如果答案是假的话,甚至。
对于true来说它很简单 - 它可以追溯到这样一个事实,即在20x10的盒子中可以挤压其他点的最大数量,而不是在5以内。为了假,它更棘手,你可以有很多其他的在那个方框中指出,但是当你将其中的固定数量与其余数字进行比较时,你必须在距离5内找到两个。无论哪种方式,给定点都会参与固定的最大点对点比较,然后再获得答案。