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

Pythonで与えられたバイナリ行列の二乗部分行列の数を数えるプログラム


2Dバイナリ行列があるとします。すべての要素が1である、行列に存在する正方形の部分行列の総数を見つける必要があります。

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

0 1 1
0 1 1

1つ(2×2)の正方形と4つの(1×1)の正方形があるため、出力は5になります

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

  • マットが空の場合、
    • 0を返す
  • c:=0
  • 0からマットの行数までの範囲のiについては、
    • 0からマットの列数までの範囲のjについては、
      • mat [i、j]が1の場合、
        • iが0またはjが0の場合、
          • c:=c + 1
        • それ以外の場合、
          • temp =((mat [i-1、j-1]、mat [i、j-1]およびmat [i-1、j]の最小値)+ mat [i、j]
          • c:=c + temp
          • mat [i、j]:=temp
  • return c

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

def solve(mat):
   if mat == []:
      return 0
   c = 0

   for i in range(len(mat)):
      for j in range(len(mat[0])):
         if mat[i][j] == 1:
            if i == 0 or j == 0:
               c += 1
            else:
               temp = (min(mat[i - 1][j - 1], mat[i][j - 1], mat[i - 1][j]) + mat[i][j])
               c += temp
               mat[i][j] = temp
   return c

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

入力

[[2, 6],[3, 4],[4, 7],[5, 5]]

出力

5

  1. Pythonで行列内の囲まれた島の数を数えるプログラム

    バイナリ行列があるとします。ここで、1は土地を表し、0は水を表します。私たちが知っているように、島は周囲が水に囲まれているグループ化された1のグループです。完全に囲まれた島の数を見つける必要があります。 したがって、入力が次のような場合 3つの島があるため、出力は2になりますが、そのうちの2つは完全に囲まれています。 これを解決するには、次の手順に従います- 関数dfs()を定義します。これにはi、jが必要です iとjが行列の範囲内にない場合、 Falseを返す matrix [i、j]が0と同じ場合、 Trueを返す matrix [i、j]:=0 a:=df

  2. 連続する1’のないバイナリ文字列の数をカウントするPythonプログラム

    この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 −正の整数Nが与えられているので、文字列に連続する1が存在しないように、長さNで使用可能なすべての可能な個別のバイナリ文字列をカウントする必要があります。 次に、以下の実装のソリューションを見てみましょう- 例 # count the number of strings def countStrings(n):    a=[0 for i in range(n)]    b=[0 for i in range(n)]    a[0] = b[0]