在矩阵中查找值的组合

时间:2013-12-26 12:52:51

标签: algorithm matrix

我正在解决离散数学中的一个问题,如果可能的话,我需要找到一个最优的解决方案(不是2 ^ n)。

我有一个矩阵

让我们说

.. 0 1 2 3 4
0 1 1 0 0 0
1 0 0 0 1 1
2 1 1 1 0 0
3 0 1 1 1 1

是否可以找到给出5 [1]:1 1 1 1 1的所有行组合而不检查每个组合?

我考虑过在另一个矩阵中对这个矩阵进行排序,其中有更多行,其中第一行是第一个矩阵的行,第一列为1 例: ..0 1 2 3 4
.0 1 1 0 0 0 - 这已经是第1列[1] .1 1 1 1 0 0 - 这已经列1 [1]
.2 1 1 0 0 0 - 这已经有第2栏[1] ..3 1 1 1 0 0 - 这已经有第2栏[1] ..4 0 1 1 1 1 - 这已经有第2栏[1] ..5 1 1 1 0 0 - 这已经有第3栏[1] ..6 0 1 1 1 1 - 这已经有第3栏[1] .0 0 0 0 1 1 - 这已经有第4栏[1] ..8 0 1 1 1 1 - 这已经有第4栏[1] .90 0 0 0 1 1 - 这已经是第5栏[1] 10 0 1 1 1 1 - 这已经列5 [1]

现在要将所有给出行的行组合为5 [1]

给出5 [1]的行的组合意味着:
将0和1视为假和真实 看着第一个矩阵:
第0行:1 1 0 0 0 +第3行0 1 1 1 1 在这种情况下,“+”表示“或”:
所以:第0行+第3行给出了五个ONES的组合 并且有很多共同点 有什么想法吗?

1 个答案:

答案 0 :(得分:2)

我会为每列创建一组行,在该列中有1行。在我们的例子中,我们将有5组5列:

0:{0,2}
1:{0,2,3}
2:{2,3} 3:{1,3} 4:{1,3}

创建一个在所有列中生成1的组合,只需从每个集合中选择一个项目。创建所有组合就像循环遍历所有集合一样简单,并忽略已经找到的组合。