【发布时间】:2014-03-05 09:54:16
【问题描述】:
假设您有一个 N × N 矩阵,其中每一行正好有一个非零元素,每一列正好有一个非零元素(非零元素可以是正数或负数)。我们想找到最大和子矩阵。我们这样做的效率如何?
矩阵的维度为 N × N,只有 N 个非零元素。 N 太大了,所以我不能使用 O(N3) 算法。有谁知道如何在 O(N2)、O(N log N) 或类似的其他时间复杂度内解决这个问题?
谢谢!
【问题讨论】:
-
什么是“小事”?
-
我假设这 N 个非零元素的位置是未知的(不是稀疏矩阵),并且值是正数和负数?
-
O(N^3) 与 Kadane 的二维。 geeksforgeeks.org/…
-
如果每一列恰好有一个非零元素,那么您可以将矩阵折叠成一个数组,然后应用 Kadane 算法,复杂度为 O(N)。但是由于您可能仍然需要遍历所有元素(为了找到那些非零值),所以您获得了 O(N^2),正如@Adam 注意到的那样。
-
@freakish 不是这样,因为子矩阵不一定折叠为折叠数组的连续子向量。
标签: algorithm dynamic-programming submatrix