【问题标题】:Find two farthest points in 2D space (Manhattan distance)在二维空间中找到两个最远的点(曼哈顿距离)
【发布时间】:2016-12-26 06:24:06
【问题描述】:

给定二维空间中的点列表(x[i],y[i]),我们需要找到两个最远的点(曼哈顿距离)。

我知道算法,但我不太明白它是如何工作的。

  1. 找到以下点:max(x[i] + y[i]), max(-x[i] + y[i]), max(-y[i] + x[i] ) 和 max(-x[i] - y[i]) 在所有 i 中。

  2. 计算列表中每个点与上一步中选择的四个点之间的距离,并选择最大的一个。

请有人解释一下为什么这个算法是正确的。

【问题讨论】:

    标签: algorithm


    【解决方案1】:

    我们必须最大化曼哈顿距离,其中 P=(X,Y) 是集合中的任意固定

    MD = Abs(X - x[i]) + Abs(Y - y[i])
    

    有四种情况:

    1 最远的点在 P 的左下角(不严格,x[i]<=X, y[i]<=Y),所以我们可以把 Abs-brackets 开为

    MD =  X - x[i] + Y - y[i]
    

    (-x[i] - y[i]) 为最大值时,达到此表达式的最大值

    2 最远的点在P的左上角,所以

    MD =  X - x[i] - Y + y[i]
    

    (-x[i] + y[i]) 为最大值时,达到此表达式的最大值

    右上和右下的情况相同。

    所以我们可以看到任何P(属于集合)的最远点必须从这四个变体中选择(称为极值点)。

    改写:

    如果我们从集合中选择任何点P,离它最远的点就是极值E。但是离极值最远的点是E1——也是极值! (如果 P 是极值,它可能是 P)。

    【讨论】:

    • 是的,如果我们“移动”坐标P = (0, 0),事情可能会更容易理解。
    【解决方案2】:

    P1 = (x1, y1)P2 = (x2, y2) s.t. d(P1, P2) = |x1-x2| + |y1-y2| 是最大的。

    假设例如x1 >= x2y1 >= y2(其他情况非常相似,您必须使用其他最大值)。那么:

    d(P1, P2) = x1 - x2 + y1 - y2 (1)
    

    P3 = (x3, y3) s.t. x3 + y3 是最大的。我们的目标是证明d(P3, P2) >= d(P1, P2)

    根据定义x3 + y3 >= x1 + y1 (2)。通过(1)和(2):

    • 如果x3 <= x2,那么:d(P3, P2) = x2 - x3 + y3 - y2 >= x2 - x3 + (x1 + y1 - x2) - y2 = x1 + y1 - x3 - y2 >= x1 - x2 + y1 - y2 = d(P1, P2)
    • 如果y3 <= y2:对称情况。
    • 否则x3 >= x2y3 >= y2d(P3, P2) = x3 - x2 + y3 - y2 >= x1 - y2 + y1 - y2 = d(P1, P2)

    因此d(P3, P2) >= d(P1, P2)d(P3, P2) <= d(P1, P2),所以算法在这种情况下是正确的。

    几何证明:让我们转换点,使P2 现在是(0, 0)。那么集合的直径是到位于最大直径的封闭球上的点的距离。具有曼哈顿距离的球是正方形,其边与坐标轴成pi/4 角。在那种情况下,公式很容易找到(它只取决于最大距离点位于哪个象限)。

    【讨论】:

      【解决方案3】:

      我不能给你一个超级技术或详细的答案,但直观地说,这是有道理的。

      您首先找到角点的原因是因为两点之间的最大曼哈顿距离将始终包含一个角点。如果不是,那么它只能等于或更小。这使得对于大型数组,您不必搜索每个组合,因此您的搜索将更加有效。如果它有助于描绘它,那么在图表上描绘 6 个点。想象 4 个角点,在任何可能的位置。然后尝试想象一种方式,其中内部两个点比其他任何具有角点的点相距更远。希望这可以帮助。我知道这不是很技术。

      【讨论】:

        猜你喜欢
        • 2013-02-28
        • 1970-01-01
        • 2023-03-11
        • 2013-01-09
        • 1970-01-01
        • 1970-01-01
        • 2014-08-13
        • 1970-01-01
        • 2012-06-18
        相关资源
        最近更新 更多