如何在连续的二维矩阵中找到曼哈顿距离?
How to find manhattan distance in a continuous two-dimensional matrix?
假设我的矩阵是
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
假设我的矩阵是
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