【问题标题】:Biggest non-contiguous submatrix with all ones包含所有子矩阵的最大非连续子矩阵
【发布时间】:2021-01-08 06:33:13
【问题描述】:

我正在解决寻找一个布尔矩阵的非连续子矩阵的问题,该子矩阵具有最大尺寸,使得它的所有单元格都是一个。

例如,考虑以下矩阵:

M = [[1, 0, 1, 1],
     [0, 0, 1, 0],
     [1, 1, 1, 1]]

M 的非连续子矩阵被指定为一组行 R 和一组列 C。子矩阵由 R 中某行中的所有单元格和某些中的 C 中的列(R 和 C 的交叉点)。请注意,非连续子矩阵是子矩阵的泛化,因此任何(连续)子矩阵也是非连续子矩阵。

M 的一个最大非连续子矩阵在其所有单元格中都有一个。该子矩阵定义为 R={1, 3, 4} 和 C={1, 3},产生:

M[1, 2, 4][1, 3] = [[1, 1, 1],
                    [1, 1, 1]]

我很难找到关于这个问题的现有文献。我正在寻找不一定需要最佳的有效算法(因此我可以将问题放宽到找到最大尺寸的子矩阵)。当然,这可以用整数线性规划建模,但我想考虑其他替代方案。

特别是,我想知道这个问题是否已经为人所知并被文献所涵盖,我想知道我对非连续矩阵的定义是否有意义,以及它们是否已经存在不同的名称。

谢谢!

【问题讨论】:

  • 您考虑的最大矩阵尺寸是多少?你有特定的时间限制吗?
  • 矩阵的大小约为 50x50,尽管我也对一般情况下的高效算法感兴趣。时间限制应该在 0.1 秒左右,尽管我对此很灵活
  • 这是最大边缘 biclique 问题,NP-hard。发表评论是因为我没有临时给你的算法建议。
  • 我听说过这种子矩阵是“矩形”。我在“矩形覆盖数字”的背景下遇到了它。也许这使查找文献更容易。 (我会在“矩形覆盖数”的上下文中查看)
  • 非常感谢@DavidEisenstat!我不一定要寻找算法,因为知道问题是 NP 难的,所以我可以专注于启发式算法和贪心算法。因此,如果您将此评论作为答案发布,我将接受它。我还找到了mathematica.stackexchange.com/questions/190162/…,您也可以将其链接到您的答案中。非常感谢!

标签: algorithm matrix optimization boolean linear-programming


【解决方案1】:

由于根据您对 Josef Wittmann 评论的回复,您希望找到矩形覆盖数,我的建议是构建 Lovász-Saks 图并应用图着色算法。

Lovász–Saks 图对于矩阵中的每个 1 条目都有一个顶点,并且在其 2x2 矩阵包含零的每对顶点之间有一条边。在您的示例中,

[[1, 0, 1, 1],
 [0, 0, 1, 0],
 [1, 1, 1, 1]]

我们可以用字母标记1:

[[a, 0, b, c],
 [0, 0, d, 0],
 [e, f, g, h]]

然后得到边

a--d, a--f, b--f, c--d, c--f, d--e, d--f, d--h.

a b   a 0   0 b   b c   0 c   0 d   0 d   d 0
0 d   e f   f g   d 0   f h   e f   f g   g h

我认为最佳的颜色是

{a, b, c, e, g, h} -> 1
{d} -> 2
{f} -> 3.

【讨论】:

  • 感谢您的回答!我想知道是否贪婪地迭代地找到最大的 1 矩形直到所有的 1 都被覆盖会导致矩形覆盖数。即,如果我们找到最大的 1-rectangle 并将 1 更改为 0,重复此过程直到没有剩余,迭代次数等于 Rectangle Covering Number。我的猜测是这是真的,虽然我还没有找到证据。
  • 没关系,这不是真的,因为我找到了一个反例:[[1 1 0], [1 1 1], [0 1 1]]
  • 好吧,我仍然想知道该过程是否会产生具有较少矩形的非重叠 1-矩形覆盖(不是矩形覆盖数,因为不允许矩形重叠)
  • 没关系,我回答自己找到了一个(非平凡的)反例:)
  • @GonzaloSolera 您可能能够枚举所有 bicliques,然后使用贪婪策略或写出精确的覆盖整数程序。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-03
相关资源
最近更新 更多