【发布时间】: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