Algorithm 如何找到所有连续的子矩阵?

Algorithm 如何找到所有连续的子矩阵?,algorithm,matrix,Algorithm,Matrix,我只是很难弄明白。我保证这不是家庭作业 给定如下任意大小的矩阵(0,0位于左上角): 我一直在试图找出如何找到所有相邻子矩阵的坐标,其中有一个。在本例中,我应该得到如下列表: [(2, 1), (3, 3) (1, 2), (3, 3)] 我很难想出这样的清单。我知道这个算法不会有效率(我猜是O(n^2)),这很好,因为我将使用的矩阵不会那么大 即使只是给我一个关于这个问题的线索,我也将不胜感激。您可以得到的最佳解决方案是O(N^4),因为这是您可以得到的最大答案大小(如果所有值都是1) 要

我只是很难弄明白。我保证这不是家庭作业

给定如下任意大小的矩阵(0,0位于左上角):

我一直在试图找出如何找到所有相邻子矩阵的坐标,其中有一个。在本例中,我应该得到如下列表:

[(2, 1), (3, 3)
 (1, 2), (3, 3)]
我很难想出这样的清单。我知道这个算法不会有效率(我猜是O(n^2)),这很好,因为我将使用的矩阵不会那么大


即使只是给我一个关于这个问题的线索,我也将不胜感激。

您可以得到的最佳解决方案是O(N^4),因为这是您可以得到的最大答案大小(如果所有值都是1)

要编写O(N^4)解决方案,请执行以下操作-使用大小为O(N^2)的辅助数组,并在其每个单元格中存储子矩阵中的个数,左上角为(0,0),右下角为给定单元格。使用此数组,您可以不断使用以下方法计算矩阵中的个数
(a,b)
(左上)->
(c,d)
(右下):

num_of_one(a,b,c,d)=helper_矩阵[c][d]+helper_矩阵[a-1][b-1]-helper_矩阵[a-1][d]-helper_矩阵[c][b-1]

注意
a-1
b-1
从阵列中脱落的情况


使用上述方法检查每个子矩阵是否只填充了一个(即其中的一个数等于子矩阵的大小)。

关于(2,2)、(3,3)呢?你不算这些吗?不,我想我应该指定它只有在它还不是一个更大的子矩阵的一部分时才算。
[(2, 1), (3, 3)
 (1, 2), (3, 3)]