Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonの列の再配置によって最大の部分行列の領域を見つけるプログラム


バイナリ行列があるとします。最初に列を必要な回数だけ再配置してから、1のみを含む最大の部分行列の領域を返すことができます。

したがって、入力が次のような場合

1 0 0
1 1 1
1 0 1

配置できるので、出力は4になります-

1 0 0
1 1 1
1 1 0

これを解決するには、次の手順に従います-

  • n:=行列の行数
  • m:=行列の列数
  • ans:=0
  • 1からn-1の範囲のiの場合、do
    • 0〜m-1の範囲のjの場合、do
      • matrix [i、j]が1の場合、
        • matrix [i、j]:=matrix [i、j] + matrix [i-1、j]
  • 行列の各行について、
    • 行を並べ替える
    • m-1から0の範囲のjの場合、1ずつ減らします。
      • ans:=ansとrowの最大値[j]*(m --j)
  • 回答を返す

理解を深めるために、次の実装を見てみましょう-

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

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

入力

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

出力

4

  1. 行列の転置を見つけるPythonプログラム

    この記事では、特定の問題ステートメントを解決するための解決策とアプローチについて学習します。 問題の説明 行列が与えられた場合、転置を同じ行列に格納して表示する必要があります。 行列の転置は、行を列に、列を行に変更することで得られます。つまり、A行列の転置はA[i][j]をA[j][i]に変更することで得られます。 以下に示す実装を見てみましょう- 例 N = 4 def transpose(A):    for i in range(N):       for j in range(i+1, N):     &nbs

  2. 配列内の最大の要素を見つけるPythonプログラム

    この記事では、特定の問題ステートメントを解決するための解決策とアプローチについて学習します。 問題の説明 入力として配列を指定すると、配列内で最大の要素を見つける必要があります。 アプローチ maxを最初の要素として初期化します。 この後、指定された配列を2番目の要素から最後までトラバースします。 トラバースされたすべての要素について、現在のmaxの値と比較します maxより大きい場合、maxが更新されます。 それ以外の場合、ステートメントはを超えます 以下の実装を見てみましょう- 例 def largest(arr,n):    #maximal element