二维矩阵中的最大和矩形 PYTHON
Maximum sum rectangle in a 2D matrix PYTHON
正如标题所说,我正在 python 的二维矩阵中寻找最大和矩形的解决方案,但我对 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
正如标题所说,我正在 python 的二维矩阵中寻找最大和矩形的解决方案,但我对 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