曼哈顿距离算法求职面试问题

时间:2011-04-27 20:58:56

标签: algorithm

在XY平面中给定一组 n 点,如何确定每个点是否至少被每隔一个点隔开5个单位的曼哈顿距离小于O(n ^ 2)?

实现此目的的最佳算法是什么?

谢谢。

1 个答案:

答案 0 :(得分:4)

  1. x对点进行排序。这需要时间'O(n log(n))'。

  2. 将范围划分为宽度为10的条带。(对于病理情况,您需要注意一点,其中一个点具有x坐标1,而下一个点具有x坐标10 20 。)O(n)

  3. 对于每个条带:

    1. 获取该条带内的点集,或者在x的任意一侧的x中,并按y进行排序。所有条带都是O(n log(n))
    2. 对于条带中的每个点,找到距离稍宽的条带中所有其他点的曼哈顿距离,其y坐标在它们自己的5个范围内。如果您在距离5内找到任何距离,请退出并报告错误。所有条带都是O(n)
  4. 报告确实。

  5. 此算法为O(n log(n))。我强烈建议你自己证明1.2中的逐点曼哈顿比较需要O(n)次操作,如果答案是假的话,甚至

    对于true来说它很简单 - 它可以追溯到这样一个事实,即在20x10的盒子中可以挤压其他点的最大数量,而不是在5以内。为了假,它更棘手,你可以有很多其他的在那个方框中指出,但是当你将其中的固定数量与其余数字进行比较时,你必须在距离5内找到两个。无论哪种方式,给定点都会参与固定的最大点对点比较,然后再获得答案。