使用 Python 计算所有子矩阵的程序
假设我们有mxn二进制矩阵,我们必须找出有多少个子矩阵都是1。
所以,如果输入是这样的
那么输出将是13,因为有6个(1x1)矩阵、3个(2,1)矩阵、2个(1x2)矩阵、1个(3x1)矩阵和1个(4x4)矩阵。
为了解决这个问题,我们将按照以下步骤操作-
m:=矩阵的行数
n:=矩阵的列数
dp:=相同大小的零矩阵mxn
对于0到m-1范围内的i,请执行
如果i与0和矩阵[i,j]相同,则
否则当matrix[i][j]非零时,则
dp[i,j]:=1
dp[i,j]:=dp[i-1,j]+1
对于0到n-1范围内的j,执行
总计:=0
对于0到m-1范围内的i,请执行
对于j+1到n范围内的k,做
总计:=总计+dp[i,j]到dp[i,k]的最小值
对于0到n-1范围内的j,执行
总回报
让我们看看以下实现以获得更好的理解-
示例
def solve(matrix): m = len(matrix) n = len(matrix[0]) dp = [[0] * n for _ in range(m)] for i in range(m): for j in range(n): if i == 0 and matrix[i][j]: dp[i][j] = 1 elif matrix[i][j]: dp[i][j] = dp[i-1][j] + 1 total = 0 for i in range(m): for j in range(n): for k in range(j+1, n+1): total += min(dp[i][j:k]) return total matrix = [[1,0,1],[0,1,1],[0,1,1]] print(solve(matrix))
输入
[4,6,7,8], 11输出结果
13