【问题标题】:Maximal sum of submatrix NxN matrix and with N-nonzero values, only O(N^2)子矩阵 NxN 矩阵和 N 个非零值的最大和,仅 O(N^2)
【发布时间】: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


【解决方案1】:

如果您想找到最大和子矩形,您可以使用此处描述的算法在 O(n^2 log n) 时间内完成 maximum sum subrectangle in a sparse matrix 。这击败了 Kadane 的 O(n^3) 算法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-30
    • 2011-03-08
    • 2021-11-03
    相关资源
    最近更新 更多