【发布时间】:2014-01-14 03:10:40
【问题描述】:
我正在从离散数学中解决一个问题,如果可能的话,我需要找到一个最优解(不是 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]
..7 0 0 0 1 1 - 这有第 4 列 [1]
..8 0 1 1 1 1 - 这有第 4 列 [1]
..9 0 0 0 1 1 - 这有第 5 列 [1]
10 0 1 1 1 1 - 这有第 5 列 [1]
现在将所有给出 row 的行与 5 [1] 组合起来
给出 5 [1] 的行组合表示:
看 0 和 1 分别为假和真
观察第一个矩阵:
第 0 行:1 1 0 0 0 + 第 3 行 0 1 1 1 1
在这种情况下,“+”表示“或”:
所以:第 0 行 + 第 3 行给出了五个“一”的组合
还有很多组合
有什么想法吗?
【问题讨论】:
-
我不知道你在问什么。
-
请在“给出 5 [1] 的行组合”中定义“给出”。
-
我添加了您可以查找的信息
-
如果列数少于 64,您可以将行推入长整数并对其应用逻辑运算。
-
值得注意的是,最坏的情况下有 2^n-1 种组合,所以,如果你想把它们全部打印出来,没有比这更好的算法了。