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

Pythonで行と列の合計を指定して有効な行列を見つけるプログラム


負でない値を持つ2つの配列rowSumとcolSumがあるとします。ここで、rowSum [i]はi番目の行の要素の合計であり、colSum[j]は2D行列のj番目の列の要素の合計です。指定されたrowSum値とcolSum値を満たす、サイズの非負の値(rowSumサイズx colSumサイズ)を持つ行列を見つける必要があります。

したがって、入力がrowSum =[13,14,12] colSum =[9,13,17]の場合、出力は

になります。
9 4 0
0 9 5
0 0 12

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

  • matrix:=空行列を作成する
  • 訪問:=新しいセット
  • 関数minimum()を定義します。これにはr、cが必要です
  • min_total:=無限大
  • type:=空白の文字列
  • 範囲0からr-1のサイズのiの場合、do
    • r [i]
    • インデックス:=i
    • type:='row'
    • min_total:=r [i]
  • 範囲0からc-1のサイズのiの場合、do
    • c [i]
    • min_total:=c [i]
    • type:='col'
    • インデックス:=i
  • タイプが「行」と同じ場合、
    • r [index]:=無限大
    • 範囲0からc-1のサイズのiの場合、do
      • c [i]が無限大と同じでなく、c [i]> =min_totalの場合、
        • c [i]:=c [i] --min_total
        • matrix [index、i]:=min_total
        • ループから抜け出す
  • タイプが「col」と同じ場合、
    • c [インデックス]:=無限大
    • 範囲0からr-1のサイズのiの場合、do
      • r [i]が無限大と同じでなく、r [i]> =min_totalの場合、
        • r [i]:=r [i] --min_total
        • matrix [i、index]:=min_total
        • ループから抜け出す
  • 訪問先にペア(インデックス、タイプ)を挿入
  • メインの方法から次のようにします-
  • 訪問したサイズはr+len(c)のサイズと同じではありませんが、実行してください
  • 最小(r、c)
  • リターンマトリックス
  • 理解を深めるために、次の実装を見てみましょう-

    def solve(r, c):
       matrix = [[0]*len(c) for _ in range(len(r))]
       visited = set()
    
       def minimum(r,c):
          min_total = float('inf')
       
          type = ''
          for i in range(len(r)):
             if(r[i] < min_total):
                index = i
                type = 'row'
                min_total = r[i]
    
          for i in range(len(c)):
             if(c[i] < min_total):
                min_total = c[i]
                type = 'col'
                index = i
    
          if(type == 'row'):
             r[index] = float('inf')
    
             for i in range(len(c)):
                if(c[i] != float('inf') and c[i] >= min_total):
                   c[i] -= min_total
                   matrix[index][i] = min_total
                   break
    
          if(type == 'col'):
             c[index] = float('inf')
             for i in range(len(r)):
                if(r[i] != float('inf') and r[i] >= min_total):
                   r[i] -= min_total
                   matrix[i][index] = min_total
                   break
    
          visited.add((index,type))
    
       while len(visited) != len(r)+len(c):
          minimum(r,c)
    
       return matrix
    
    rowSum = [13,14,12]
    colSum = [9,13,17]
    print(solve(rowSum, colSum))

    入力

    [13,14,12], [9,13,17]

    出力

    [[9, 4, 0], [0, 9, 5], [0, 0, 12]]

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

      この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 −行列が与えられたので、行列の転置を表示する必要があります。 行列の転置は、A[i][j]に存在する値をA[j][i]に置き換えることによって得られます。 それでは、以下の実装の概念を見てみましょう- アプローチ1:入力行列の転置を格納するための新しい行列を作成する 例 def transpose(A,B):    for i in range(M):       for j in range(N):        

    2. 行列の転置を見つける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