【发布时间】:2018-02-27 12:11:23
【问题描述】:
我需要帮助找到一种算法,该算法尽可能有效地检查是否可以通过翻转矩阵的行和列来达到给定的二进制矩阵。 每当你翻转一行或一列时,所有的 0 都变成 1,所有的 1 都变成 0
确定是否可以通过翻转一个矩阵的行和列来达到给定二进制矩阵的算法
例如,可以通过翻转第二行然后翻转第二列来达到这个矩阵:
+---+---+---+
| 1 | 0 | 1 |
+---+---+---+
| 0 | 1 | 0 |
+---+---+---+
| 1 | 0 | 1 |
+---+---+---+
但是这个矩阵不可能是你做的任何翻转
+---+---+---+
| 1 | 0 | 0 |
+---+---+---+
| 0 | 1 | 0 |
+---+---+---+
| 0 | 0 | 1 |
+---+---+---+
【问题讨论】:
-
矩阵的最大尺寸是多少?
-
你能举例说明一下翻转到底是做什么的吗?
-
这似乎是一个难题,需要进行一些测试。你有没有写过一个蛮力算法来用简单的例子来试试这个?可能有一个数学解决方案(即通过计算行列式),但您需要能够找到工作矩阵和非工作矩阵之间的区别。如果这不可能,那你就迷路了,因为这是一个终止问题,本质上是无法解决的。
-
@trincot:翻转将行或列上的所有 0 更改为 1,反之亦然。第一个示例在翻转中间行和中间列后给出全 1。
标签: algorithm matrix time-complexity