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

Pythonの最小経路合計


非負の整数で満たされたmxn行列があると仮定し、そのパスに沿ったすべての数値の合計を最小化する左上隅から右下隅へのパスを見つけます。動きは、どの時点でも下または右のいずれかになります。たとえば、マトリックスが次のような場合

1 3 1
1 5 1
4 2 1

出力は7になり、パスは1,3,1,1,1になります。これにより、合計が最小化されます

手順を見てみましょう-

  • a:=行数、b:=列数
  • i:=a – 1、j:=b – 1
  • while j> =0
    • matrix [a、j]:=matrix [a、j] + matrix [a、j + 1]
    • jを1つ減らします
  • while i> =0
    • matrix [i、b]:=matrix [i、b] + matrix [i + 1、b]
    • iを1つ減らします
  • j:=b – 1およびi:=行– 1
  • while i> =0
    • while j> =0
      • matrix [i、j]:=matrix [i、j] + matrix [i、j+1]とmatrix[i+ 1、j]の最小値
      • jを1つ減らします
    • j:=b – 1
    • i:=i – 1
  • return matrix [0、0]

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

class Solution(object):
   def minPathSum(self, grid):
      row = len(grid)-1
      column = len(grid[0])-1
      i=row-1
      j=column-1
      while j>=0:
         grid[row][j]+=grid[row][j+1]
         j-=1
      while i>=0:
         grid[i][column]+=grid[i+1][column]
         i-=1
      j=column-1
     i = row-1
      while i>=0:
         while j>=0:
            grid[i][j] += min(grid[i][j+1],grid[i+1][j])
            j-=1
         j=column-1
         i-=1
      return(grid[0][0])
ob1 = Solution()
print(ob1.minPathSum([[1,3,1],[1,5,1],[4,2,1]]))

入力

[[1,3,1],[1,5,1],[4,2,1]]

出力

7

  1. Pythonでのパスの合計

    1つのツリーと合計があるとします。そのパスをたどると、与えられた合計と一致する合計が得られるように、1つのパスを見つける必要があります。ツリーが[0、-3,9、-10、null、5]のようで、合計が14であるとすると、パス0→9→5があります。 これを解決するために、次の手順に従います。 ルートがnullの場合は、Falseを返します 左右のサブツリーが空の場合、sum – root.val =0の場合はtrueを返し、それ以外の場合はfalseを返します 戻り値solve(root.left、sum – root.val)またはsolve(root.right、su

  2. 数の因子の最小合計を見つけるためのPythonプログラム

    この記事では、以下に示す問題ステートメントの解決策について学習します- 問題の説明 入力された数値を指定して、指定された数値の因子の最小合計を求めます。 ここでは、すべての因子とそれに対応する合計を計算し、それらの中から最小値を見つけます。 したがって、数の積の最小合計を見つけるために、積の素因数の合計を見つけます。 これが問題の反復実装です- 例 #iterative approach def findMinSum(num):    sum_ = 0    # Find factors of number and add to the sum