【问题标题】:Finding combination of values in matrix在矩阵中查找值的组合
【发布时间】: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 种组合,所以,如果你想把它们全部打印出来,没有比这更好的算法了。

标签: algorithm matrix


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2023-02-01
    • 2014-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-11
    • 2014-06-25
    • 2014-12-02
    相关资源
    最近更新 更多