Pythonで再配置された最大の部分行列を見つけるプログラム
m x nのバイナリ行列があるとすると、行列の列を任意の順序で再配置できます。いくつかの並べ替えタスクを実行した後、サブマトリックスのすべての要素が1である、マトリックス内の最大のサブマトリックスの領域を見つける必要があります。
したがって、入力が次のような場合
1 | 0 | 1 |
1 | 1 | 1 |
0 | 0 | 1 |
列を交換した後、
のような行列が得られるため、出力は4になります。1 | 1 | 0 |
1 | 1 | 1 |
0 | 1 | 0 |
ここで、最大部分行列は4つの1を含む正方形のサイズです。
これを解決するには、次の手順に従います-
- row:=行列の行数、col:=行列の列数
- 0からcol-1の範囲のjの場合、do
- iの範囲が1から行-1の場合、実行します
- matrix [i、j]が1の場合、
- matrix [i、j]:=matrix [i、j] + matrix [i-1、j]
- matrix [i、j]が1の場合、
- iの範囲が1から行-1の場合、実行します
- ans:=0
- 0から行-1の範囲のiの場合、実行
- リストマトリックスを並べ替える[i]
- col-1から0の範囲のjの場合、1ずつ減らします。
- matrix [i、j]が0と同じ場合、
- ループから抜け出す
- ans =ansと(col-j)* matrix [i、j])の最大値
- matrix [i、j]が0と同じ場合、
- 回答を返す
例
理解を深めるために、次の実装を見てみましょう-
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プログラム
この記事では、特定の問題ステートメントを解決するための解決策とアプローチについて学習します。 問題の説明 行列が与えられた場合、転置を同じ行列に格納して表示する必要があります。 行列の転置は、行を列に、列を行に変更することで得られます。つまり、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
-
配列内の最大の要素を見つけるPythonプログラム
この記事では、特定の問題ステートメントを解決するための解決策とアプローチについて学習します。 問題の説明 入力として配列を指定すると、配列内で最大の要素を見つける必要があります。 アプローチ maxを最初の要素として初期化します。 この後、指定された配列を2番目の要素から最後までトラバースします。 トラバースされたすべての要素について、現在のmaxの値と比較します maxより大きい場合、maxが更新されます。 それ以外の場合、ステートメントはを超えます 以下の実装を見てみましょう- 例 def largest(arr,n): #maximal element