【发布时间】:2013-07-09 20:55:02
【问题描述】:
正如其他帖子中所指出的,可以使用二维 kadane 算法在 O(n^3) 时间内在 NxN 矩阵中找到最大和子矩形。但是,如果矩阵是稀疏的,特别是 O(n) 非零条目,那么 O(n^3) 时间可以被打败吗?
如果它有帮助,对于我感兴趣的当前应用程序,有一个解决方案就足够了,假设矩阵的每一行和每一列中最多有一个非零值。然而,在我未来的应用程序中,这个假设可能不合适(只是稀疏性会成立),无论如何我的数学直觉是,可能有很好的解决方案可以简单地利用稀疏性而不进一步利用矩阵是对角线和置换矩阵的乘积。
【问题讨论】:
-
如果每行和每列最多有非零值,然后将这些值投影到x轴和y轴上,您将得到两个一维数组大小 n。找到两个数组的最大连续子数组。我认为这会给你最大的子矩形。这可以在 O(n) 时间和 O(n) 空间复杂度内完成。
-
不幸的是,这个提议的 O(n) 解决方案不起作用,如以下反例所示:1 0 0\\ 0 0 2\\ 0 -1 0\\
标签: algorithm