我試圖將以下遞歸代碼轉換爲自下而上/迭代動態編程。 但是我無法弄清楚我應該迭代的順序,因爲狀態依賴於下一個和上一個索引。如何將以下遞歸dp轉換爲迭代
matrix = [[-1, 4, 5, 1],
[ 2,-1, 2, 4],
[ 3, 3,-1, 3],
[ 4, 2, 1, 2]]
rows = len(matrix)
cols = len(matrix[0])
cache = {}
def maxsum(dir, x, y):
key = (dir, x, y)
if key in cache: return cache[key]
base = matrix[y][x]
if x < cols-1:
best = base + maxsum(2, x+1, y)
else:
best = base
if dir != 0 and y > 0:
best = max(best, base + maxsum(1, x, y-1))
if dir != 1 and y < rows-1:
best = max(best, base + maxsum(0, x, y+1))
cache[key] = best
return best
是否有可能將此代碼轉換爲迭代? 如果是,請幫我解決迭代排序問題。
'dir'可以從0-2獲得值。
x和y爲1和1000之間
我不想用棧來解決這個問題。我想用一般的迭代循環來解決這個問題,就像我們在自下而上的動態編程中所做的那樣。
[路從遞歸迭代去]的可能的複製(http://stackoverflow.com/questions/159590/way-to-go-from-recursion-to-iteration) –
我相信你可以通過在每列上進行多次傳遞來解決此問題,從右到左。第一遍是將列的「基本」值設置爲右側。接下來是** rows-1 **遍以傳遞列的一端到另一端的任何優先值。 – Prune