给定一个大的稀疏矩阵(比如 10k+ x 1M+),我需要找到一个子集,不一定是连续的,形成密集矩阵(所有非零元素)的行和列。我希望这个子矩阵在某些纵横比约束内尽可能大(不是最大的总和,而是最大的元素数量)。
是否有任何已知的确切或近似的解决方案来解决这个问题?
在 Google 上快速浏览一下似乎会给出很多接近但不完全准确的结果。我应该寻找哪些条款?
编辑:只是为了澄清;子矩阵不必是连续的。事实上,行和列的顺序是完全任意的,所以相邻性是完全无关的。
基于 Chad Okere 的想法
- 将行从最大计数排序到最小计数(不是必需的,但可能有助于提高性能)
- 选择具有“大”重叠的两行
- 添加不会减少重叠的所有其他行
- 记录那套
- 添加任何行以最少的方式减少重叠
- 在 #3 重复,直到结果变小
- 使用不同的起始对从 #2 重新开始
- 继续直到你认为结果足够好