【问题标题】:Maximum sum/area submatrix最大和/面积子矩阵
【发布时间】:2012-10-17 02:14:09
【问题描述】:

输入:nxn 正数/负数和 k 矩阵。

输出:具有最大元素总和的子矩阵除以其具有至少 k 个元素的元素数。

对于这个问题,有没有比 O(n^4) 更好的算法?

【问题讨论】:

  • @Mateusz 这是最大金额。
  • 这个问题有一个简单的答案:只要找到矩阵的最大元素。一个 1x1 的子矩阵,包含这个元素是最大和/面积子矩阵。
  • @EvgenyKluev 你是对的。如果我们寻找具有超过 k 个元素的矩阵会怎样。
  • 对于超过 k 个元素,您可以尝试所有列的子集并解决此问题的一维版本,如 this question 中所述。

标签: algorithm matrix


【解决方案1】:

一种基于 FFT 的分治法来解决这个问题:

https://github.com/thearn/maximum-submatrix-sum

它的效率不如 Kadane 的 (O(N^3) vs. O(N^3 log N)),但在解决方案构建方面确实给出了不同的看法。

【讨论】:

  • 这令人印象深刻。
【解决方案2】:

有一个 O(n^3) 2-d kadane 算法用于在 nxn 矩阵中找到最大和子矩阵(即子矩形)。 (您可以在 SO 上找到有关它的帖子,或在线阅读)。一旦您了解了算法的工作原理,很明显,如果您可以解决在 1-d 数组中找到长度至少为 m 的最大平均子区间的问题,您可以获得 O(n^3) 时间解决方案在 O(n) 时间内的 n 个数字。这确实是可能的,见论文cs.slu.edu/~goldwasser/publications/DensityPreprint.pdf

因此,您的问题有一个 O(n^3) 时间解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-02
    • 1970-01-01
    • 2011-02-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多