获取最大子矩阵的坐标

我有一个子矩阵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]

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

wwwwwssssss 回答:获取最大子矩阵的坐标

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

时间复杂度O(m 2 n 2


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

时间复杂度O(mn 2

本文链接:https://www.f2er.com/3128037.html

大家都在问