获取最大子矩阵的坐标

时间:2019-11-10 18:32:29

标签: algorithm submatrix

我有一个子矩阵m1 x n1中最大的子矩阵m x n。我找到了最大子矩阵的总和,但是我想知道如何在r1c1(该子矩阵的第一行和第一列)和r2c2(该子矩阵的最后一行和最后一列)处找到坐标。

到目前为止,我已经对矩阵进行了预处理,将其总和存储在每个元素中,如下所示:

SUM[i, j] = SUM[i−1, j] + SUM[i, j−1] − SUM[i−1, i−1] + MATRIX[i, j]

我发现对于任何给定的r1,c1,r2,c2:

SUMS = SUM[r2,c2] - SUM[r1-1,c2] - SUM[r2,s1-1] + SUM[r1-1,c2-1]

如果我想获得可以告诉我该子矩阵的坐标的输出,应该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

您可以对所有可能的r1r2进行暴力破解,然后再对这对c1进行所有可能的c2r1, r2暴力破解并进行计算您的SUM数组的此子矩阵的总和,很简单,但是效率不高。

时间复杂度O(m 2 n 2


让我们尝试改善它。通过进行一些预处理,您可以知道r1时间中每一列的r2O(1)之和。这样,我们将一个二维最大的子矩阵问题转换为一维Maximum Subarray Problem,这可以帮助我们在c1的时间内找到c2r1, r2这对O(n)

时间复杂度O(mn 2