Algorithm 在二维空间中查找两个最远的点(曼哈顿距离)

Algorithm 在二维空间中查找两个最远的点(曼哈顿距离),algorithm,Algorithm,给定二维空间中的点列表(x[i],y[i]),我们需要找到两个最远的点(曼哈顿距离) 我知道这个算法,但我不太明白它是如何工作的 找出以下几点:max(x[i]+y[i])、max(-x[i]+y[i])、max(-y[i]+x[i])和max(-x[i]-y[i]) 计算列表中的每个点与上一步中选择的四个点之间的距离,然后选择最大的一个点 有人请解释一下为什么这个算法是正确的。我不能给你一个超级技术或详细的答案,但凭直觉,它是有意义的 首先查找角点的原因是,两点之间的最大曼哈顿距离始终包含一个

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

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

  • 找出以下几点:max(x[i]+y[i])、max(-x[i]+y[i])、max(-y[i]+x[i])和max(-x[i]-y[i])

  • 计算列表中的每个点与上一步中选择的四个点之间的距离,然后选择最大的一个点


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

    我不能给你一个超级技术或详细的答案,但凭直觉,它是有意义的


    首先查找角点的原因是,两点之间的最大曼哈顿距离始终包含一个角点。如果没有,那么它只能等于或更小。这样,对于大型阵列,您就不必搜索所有组合,因此您的搜索效率将大大提高。如果它有助于描绘它,那么在图表上描绘6个点。在任何可能的位置描绘4个角点。然后试着想象一种方式,其中内部两点之间的距离比其他任何一个具有角点的点都要远。希望这有帮助。我知道这不是很专业

    我们必须最大化曼哈顿距离,其中p=(X,Y)是集合中的任意不动点

    MD = Abs(X - x[i]) + Abs(Y - y[i])
    
    有四种情况:

    1最远的点是从p(不严格地说,
    x[i]Let
    P1=(x1,y1)
    P2=(x2,y2)
    s.t.
    d(P1,P2)=| x1-x2 |+| y1-y2
    最大

    例如,假设
    x1>=x2
    y1>=y2
    (其他情况非常相似,您必须使用其他最大点)。然后:

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

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

    • 如果
      x3=x2-x3+(x1+y1-x2)-y2=x1+y1-x3-y2>=x1-x2+y1-y2=d(P1,P2)
    • 如果
      y3=x2
      y3>=y2
      d(P3,P2)=x3-x2+y3-y2>=x1-y2+y1-y2=d(P1,P2)

    因此
    d(P3,P2)>=d(P1,P2)
    d(P3,P2)这是正确的,如果我们“移动”坐标使
    p=(0,0)
    更容易理解。
    MD =  X - x[i] + Y - y[i]
    
    MD =  X - x[i] - Y + y[i]
    
    d(P1, P2) = x1 - x2 + y1 - y2 (1)