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