最大连续子矩阵算法
暴力求解不可取
或许可以从 O(n)复杂度内求解最大连续子数组的算法 得到灵感
O(n2)复杂度求最大连续子矩阵和算法:
- 创建一个新矩阵sum,sum[i][j]存放sun[i][0-j]的和
- 每个候选矩阵由左上角matrix[i][j]和右下角的元素matrix[p][q]确定,这个候选矩阵的和为res += (sum[i-p][q] - sum[i-p][i-1])
- 遍历矩阵,得到最大子矩阵和
代码
def getMaxSub(matrix):sum = []for line in matrix:rowSum = []s = 0for i in line:s += irowSum.append(s)sum.append(rowSum)m = len(matrix)n = len(matrix[0])max = matrix[0][0]i = 0j = 0while(i<m):while(j<n):p = iwhile(p<m):q = jwhile(q<n):res = 0for row in range(i,p+1):if(i==0):res += sum[row][q]else:res += (sum[row][q] - sum[row][i-1])if(res<0): breakmax = res if max<res else maxq += 1p += 1j += 1i += 1print(max)