一尘不染

如何按行和列转换矩阵?

algorithm

我有一个由1或0元素组成的方阵。第i行切换可切换所有ith行元素(1变为0,反之亦然),第j列切换可切换所有第j列元素。我还有另一个类似大小的方阵。我想使用最少的切换次数将初始矩阵更改为最终矩阵。例如

|0 0 1|
|1 1 1|
|1 0 1|

|1 1 1|
|1 1 0|
|1 0 0|

需要第一行和最后一列的切换。

正确的算法是什么?


阅读 773

收藏
2020-07-28

共1个答案

一尘不染

通常,问题将无法解决。要看到这一点,请注意将矩阵A转换为矩阵B等效于将矩阵A-B(使用二进制算术计算,因此0-1 =
1)转换为零矩阵。查看矩阵A-B,并应用列切换(如果需要),以便第一行变为全0或全1。至此,您已经完成了列切换操作-
如果切换一列,则必须全部切换它们才能使第一行正确。如果此时即使一行是0和1的混合,问题也无法解决。如果现在每行都是全0或全1,则可以通过切换适当的行以达到零矩阵来解决问题。

要获得最小值,请比较第一行变为0与1时所需的切换次数。在OP的示例中,候选对象将切换第3列和第1行,或者切换第1列和第2列以及第2列和第3行。大于N-
如果大于N,则切换相对的行和列。

2020-07-28