【发布时间】:2013-11-05 07:58:10
【问题描述】:
让M 是一个 n x n 矩阵,每个条目等于 0 或 1。让m[i][j]
表示行 i 和列 j 中的条目。对角线条目是其中之一
为某些 i 填写 m[i][i]。交换矩阵M 的行i 和j 表示以下操作:
我们将值 m[i][k] 和 m[j][k] 交换为 k = 1, 2 ..... n。交换两列
类似地定义我们说M是可重新排列的,如果可以交换一些行对和一些列对(以任何顺序),使得,
在所有交换之后,M 的所有对角线条目都等于 1。
(a) 给出一个矩阵M 的例子,它不能重新排列,但是对于
每一行和每一列中至少有一个条目等于!。
(b) 给出一个多项式时间算法,确定一个矩阵是否
M 和 0-1 条目可重新排列。
我尝试了很多,但无法得出任何结论,请为我推荐算法。
【问题讨论】:
-
如果措辞正确,这可能是 math.stackexchange 上的一篇不错的帖子;那边的线性代数书呆子可能会给它一个很好的理论背景。
-
如果我理解正确,我们可以交换同一列中的元素。所以这是计算每列中 1 的数量的问题。如果 n 为奇数,则除中心列外,每一列必须至少有两个 1。中心柱可以有一个。如果 n 是偶数,则每列应至少有两个 1。因此算法甚至是线性的。我可能错过了一些重要的东西。
-
如果将矩阵解释为有向图邻接矩阵,那么可以证明这个问题等价于确定图是否可以分解为强连通分量。希望这已经足够暗示了。玩转转换本身(并尝试将它们视为只是移动行和列标签)。至于 (a) 部分,尝试矩阵
[0,1,1;1,0,0;1,0,0]并将其解释为图形。有没有定向循环?如果图确实有一个有向环,你能排列矩阵,使对角线元素成为环的边吗? -
@Nirk 恐怕我无法按照您的提示进行操作 - 看起来像是进行拓扑排序以获得上三角矩阵,但这不是这里需要的。由 1 的单个对角线组成的矩阵不对应于循环,但可以解决问题。一个完全 1s 的矩阵解决了这个问题并且是一个循环。顶部和左侧 1 的矩阵是一个循环,但不能解决问题。空矩阵既不是循环也不能解决问题,所以我想我有所有四种组合。
-
@mcdowella 通过将最后一列冒泡到前面,您有一个循环(如果您将该矩阵的第一列解释为与第一行相同的节点)。因此,将列移回末尾只会将第一列的标签移到末尾