使用Python编写用于计算所有元素为1的子矩阵的程序

使用Python编写用于计算所有元素为1的子矩阵的程序

假设我们有一个m x n的二进制矩阵,我们必须找出有多少个子矩阵的元素全部为1。

因此,如果输入如下

1 0 1
0 1 1
0 1 1

那么输出将为13,因为有6个(1×1)矩阵,3个(2×1)矩阵,2个(1×2)矩阵,1个(3×1)矩阵和1个(4×4)矩阵。

为了解决这个问题,我们将遵循以下步骤:

  • m:矩阵的行数

  • n:矩阵的列数

  • dp:大小为m x n的零矩阵

  • 对于0到m – 1范围内的i,执行以下操作:

    • 对于0到n – 1范围内的j,执行以下操作:
      • 如果i与0相同且matrix[i,j],则

      • dp[i,j]:= 1

      • 否则,当matrix[i][j]不为零时,则

      • dp[i,j]:= dp[i-1,j] + 1

  • 总计:= 0

  • 对于0到m – 1范围内的i,执行以下操作:

    • 对于0到n – 1范围内的j,执行以下操作:
      • 对于j+1到n范围内的k,执行以下操作:

      • 总计:= total + dp [i,j:k]的最小值

  • 返回总计

让我们看一下以下实现,以获得更好的理解。

示例

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))

输入

[[1,0,1],[0,1,1],[0,1,1]]

输出

13

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程