Algorithm 在二维空间中查找两个最远的点(曼哈顿距离)
给定二维空间中的点列表(x[i],y[i]),我们需要找到两个最远的点(曼哈顿距离) 我知道这个算法,但我不太明白它是如何工作的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]) 计算列表中的每个点与上一步中选择的四个点之间的距离,然后选择最大的一个点 有人请解释一下为什么这个算法是正确的。我不能给你一个超级技术或详细的答案,但凭直觉,它是有意义的 首先查找角点的原因是,两点之间的最大曼哈顿距离始终包含一个
有人请解释一下为什么这个算法是正确的。我不能给你一个超级技术或详细的答案,但凭直觉,它是有意义的
首先查找角点的原因是,两点之间的最大曼哈顿距离始终包含一个角点。如果没有,那么它只能等于或更小。这样,对于大型阵列,您就不必搜索所有组合,因此您的搜索效率将大大提高。如果它有助于描绘它,那么在图表上描绘6个点。在任何可能的位置描绘4个角点。然后试着想象一种方式,其中内部两点之间的距离比其他任何一个具有角点的点都要远。希望这有帮助。我知道这不是很专业 我们必须最大化曼哈顿距离,其中p=(X,Y)是集合中的任意不动点
MD = Abs(X - x[i]) + Abs(Y - y[i])
有四种情况:
1最远的点是从p(不严格地说,x[i]LetP1=(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)