【发布时间】:2019-10-22 13:57:32
【问题描述】:
我有 2 个二进制 (r x c) 矩阵 - 矩阵 A 和矩阵 B 大小相同。矩阵 B 是通过将矩阵 A 中的 1 向左/右/上/下移动一个偏移值来获得的。
int a[][] ={
{ 0,0,1,0,0 },
{ 0,1,0,1,0 },
{ 1,0,0,0,1 }
},
b[][] =
{
{ 0,0,0,1,0 },
{ 0,0,1,0,1 },
{ 0,1,0,0,0 }
}
在这种情况下,矩阵 B 向右移动了一行。我的目标是找到两个矩阵之间的偏移量(例如,r+1)。
我的解决方案 - 将一个全为 0 的列添加到矩阵 A 并检查其是否等于矩阵 B。继续添加 c-1 列。对行重复相同的过程。当两个矩阵相等时停止。
这似乎是一种非常低效的方法。有没有更好的方法来做到这一点?
【问题讨论】:
-
我在这里看到一个需要解释的极端情况。如果给定的矩阵可能有多个等价的移位版本会发生什么?我们如何知道哪种转变是可以接受的?另外,您是否将值从矩阵的末尾包装到开头?
-
假设我们需要找到任何一种可能的偏移量?而且我没有环绕值(移位时添加一列/行 0)