[英]Best way to get the indexes of a minimum sum path dynamic programming approach?
上下文: https://leetcode.com/problems/minimum-path-sum/
此問題的動態編程解決方案如下所示:
from math import inf
def min_path(grid, y, x):
matrix = [[0] * (y + 1) for _ in range(x + 1)]
matrix[0][0] = grid[0][0]
for i, row in enumerate(matrix):
for j, n in enumerate(row):
if i == 0 and j == 0:
continue
matrix[i][j] = grid[i][j] + min(i and matrix[i-1][j] or inf, j and matrix[i][j-1] or inf)
return matrix[x][y]
print(min_path([[1, 2, 3],
[4, 8, 2],
[1, 5, 3]], 2, 2))
但是,這種方法只返回最小/最大和路徑。 是否有一種簡潔的方法來獲得構成最佳路徑的實際數字索引?
將當前路徑保留為元組的第二個元素。 請注意, min()
的比較將由第一個元素執行,因此不應指定其他鍵。 同樣對於當前問題,我們可以省略tuple(tuple())
,因為由於使用了算法,我們永遠不會得到這個元素作為結果。 I created a function to add tuples elementwise, you can also use numpy arrays instead or create lambda function and pass it instead of name like (lambda x,y: tuple(x[i]+y[i] for i in range(len(x))))(...)
。
from math import inf
def elwise(x,y):
return tuple(x[i]+y[i] for i in range(len(x)))
def min_path(grid, y, x):
matrix = [[(0, ((i,j),))
for j in range(y + 1)]
for i in range(x + 1)]
matrix[0][0] = (grid[0][0], ((0,0),))
for i, row in enumerate(matrix):
for j, n in enumerate(row):
if i == j == 0:
continue
matrix[i][j] = elwise(
min(
i and matrix[i-1][j] or (inf,tuple(tuple())),
j and matrix[i][j-1] or (inf,tuple(tuple()))),
(grid[i][j],((i,j),)))
return matrix[x][y]
print(min_path([[1, 2, 3],
[4, 8, 2],
[1, 5, 3]], 2, 2))
此代碼打印以下內容:
(11, ((0, 0), (0, 1), (0, 2), (1, 2), (2, 2)))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.