Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在连续二维矩阵中求曼哈顿距离?_Java_Algorithm_Matrix_Distance - Fatal编程技术网

Java 如何在连续二维矩阵中求曼哈顿距离?

Java 如何在连续二维矩阵中求曼哈顿距离?,java,algorithm,matrix,distance,Java,Algorithm,Matrix,Distance,假设我的矩阵是 7 1 2 3 5 6 4 8 9 目标配置按一个排序,如下所示: 1 2 3 4 5 6 7 8 9 使用曼哈顿距离算法,我可以计算“7”到其目的地的距离为2步,但矩阵是连续的,也就是说,我可以在两个方向上移动行和列,因此“7”距离正确的位置只有一步之遥 如何修改曼哈顿距离算法以反映该属性 谢谢。在通常情况下,也就是说,没有环绕的网格,我们将曼哈顿距离从i,j到r,c定义为 abs(r-i) + abs(c-j) 其中,abs表示绝对值 在由n水平线(行)和m垂直线(列)

假设我的矩阵是

7 1 2
3 5 6
4 8 9
目标配置按一个排序,如下所示:

1 2 3
4 5 6
7 8 9
使用曼哈顿距离算法,我可以计算“7”到其目的地的距离为2步,但矩阵是连续的,也就是说,我可以在两个方向上移动行和列,因此“7”距离正确的位置只有一步之遥

如何修改曼哈顿距离算法以反映该属性


谢谢。

在通常情况下,也就是说,没有环绕的网格,我们将曼哈顿距离从
i,j
r,c
定义为

abs(r-i) + abs(c-j)
其中,
abs
表示绝对值

在由
n
水平线(行)和
m
垂直线(列)组成的环绕网格中,我们可以将曼哈顿距离计算为

min(abs(r-i), n-1-abs(r-i))  +  min(abs(c-j), m-1-abs(c-j))
其中
min
是取两个值中最小值的函数

这个公式背后的原因是,从第一行到最后一行的距离是
n-1
。如果任意两行之间有直接距离
d
,则环绕距离
e
为如下值:

d + e = n-1

e = n-1 - d

现在,两行之间的距离是直接距离和环绕距离中的最小值。对于柱之间的距离,我们也有同样的争论。曼哈顿距离只是行与列之间距离的总和

考虑以下示例,其中有
n=8
行和
m=10
列。我们想计算从
(2,7)
(5,1)
的曼哈顿距离

如果没有环绕,曼哈顿距离为:

abs(r-i) + abs(c-j)

= abs(5-2) + abs(1-7)

= abs(3) + abs(-6)

= 3 + 6

= 9
min(abs(r-i), n-1-abs(r-i))  +  min(abs(c-j), m-1-abs(c-j))

= min(3, 7-3) + min(6, 9-6)

= min(3, 4) + min(6, 3)

= 3 + 3

= 6
使用wraparound,曼哈顿距离为:

abs(r-i) + abs(c-j)

= abs(5-2) + abs(1-7)

= abs(3) + abs(-6)

= 3 + 6

= 9
min(abs(r-i), n-1-abs(r-i))  +  min(abs(c-j), m-1-abs(c-j))

= min(3, 7-3) + min(6, 9-6)

= min(3, 4) + min(6, 3)

= 3 + 3

= 6

我认为这与曼哈顿的距离无关。这更像是一个实现细节。您只需要实现数据结构(或解算器)来表示圆环结构。如果没有显示当前算法,则很难建议修改。我怀疑我会使用模运算,并允许我尝试在所有方向上移动
(高度+1)/1
位置。