Python 二维矩阵中的最大和矩形

Python 二维矩阵中的最大和矩形,python,algorithm,solution,Python,Algorithm,Solution,正如标题所说,我正在寻找python中2d矩阵中最大和矩形的解决方案,但我对Kadanes算法不感兴趣,我在寻找具有许多循环的所谓“原始解决方案”。如何做到这一点?这是一个简单的算法:有4个变量决定子矩阵:它的 第一排 左列 底层 右栏 这意味着您将有四个嵌套循环来查找这些参数的所有可能组合 然后,计算每个子矩阵的和。这意味着您将访问每个子矩阵中的每个单元格。您将有一个循环: 子矩阵中的每一行 子矩阵中的每列 所以总共有6个循环。看起来是这样的: m = [ [ 1, 2, -

正如标题所说,我正在寻找python中2d矩阵中最大和矩形的解决方案,但我对Kadanes算法不感兴趣,我在寻找具有许多循环的所谓“原始解决方案”。如何做到这一点?

这是一个简单的算法:有4个变量决定子矩阵:它的

  • 第一排
  • 左列
  • 底层
  • 右栏
这意味着您将有四个嵌套循环来查找这些参数的所有可能组合

然后,计算每个子矩阵的和。这意味着您将访问每个子矩阵中的每个单元格。您将有一个循环:

  • 子矩阵中的每一行
  • 子矩阵中的每列
所以总共有6个循环。看起来是这样的:

m = [
    [ 1,  2, -1, -4, -20],
    [-8, -3,  4,  2,   1],
    [ 3,  8, 10,  1,   3],
    [-4, -1,  1,  7,  -6]
]

maxsum = 0
for top in range(0, len(m)):
    for left in range(0, len(m[0])):
        for bottom in range(top, len(m)):
            for right in range(left, len(m[0])):
                thissum = 0
                for row in range(top, bottom+1):
                    for col in range(left, right+1):
                        thissum += m[row][col]
                maxsum = max(thissum, maxsum)
print(maxsum)  # 29

循环遍历所有矩阵,存储总和,如果它比存储的总和更大,则只为其分配一个新的最大值?我有这个想法,但我在实现它时遇到了一个问题,您能给我看一下工作代码吗?这很有效,但效率不高?此解决方案需要6个嵌套循环–4个用于2轴O(n**4)的起点和终点坐标,2个用于子矩阵O(n**2)的求和。这个解决方案的总体时间复杂度为O(n**6)。@DanielHao,的确如此,但这正是OP所要求的。明白了。非常有趣。。。谢谢