在Python中查找通过重排列后最大子矩阵的程序

在Python中查找通过重排列后最大子矩阵的程序

假设我们有一个m x n的二进制矩阵,我们可以按任意顺序重新排列矩阵的列。我们必须在矩阵中找到最大子矩阵的面积,在此子矩阵中每个元素在执行一些重排列任务后均为1。

因此,如果输入如下所示:

1 | 0 | 1
—|—|—
1 | 1 | 1
0 | 0 | 1
则输出将为4,因为在列交换之后,我们得到像下面这样的矩阵:

1 1 0
1 1 1
0 1 0

这里最大子矩阵的大小为四个1的正方形大小。

为了解决这个问题,我们将按如下步骤进行 –

  • 行:=矩阵的行数,列:=矩阵的列数
  • 对于j在0到col-1的范围内,执行以下操作
    • 对于i在1到row-1的范围内,执行以下操作
      • 如果matrix[i,j]为1,则
      • matrix[i,j]: = matrix[i,j] + matrix[i-1,j]
  • ans:= 0
  • 对于i在0到row-1的范围内,执行以下操作
    • 对于矩阵[i]中的元素,进行排序
    • 对于j在从col-1到0的范围内进行递减,执行以下操作
      • 如果matrix[i,j]与0相同,则
      • 退出循环
      • ans:= ans和(col-j)*matrix[i,j])的最大值
  • 返回ans

示例

让我们看一下以下实现,以更好地理解 –

def solve(matrix):
   row, col = len(matrix), len(matrix[0])
   for j in range(col):
      for i in range(1,row):
         if matrix[i][j]:
            matrix[i][j]+=matrix[i-1][j]
   ans = 0
   for i in range(row):
      matrix[i].sort()
      for j in range(col-1,-1,-1):
         if matrix[i][j]==0:
            break
         ans = max(ans, (col-j)*matrix[i][j])
   return ans

matrix = [[0,0,1],[1,1,1],[1,0,1]]
print(solve(matrix))

输入

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

输出

4

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程