以下のアルゴリズム (疑似コード) の時間計算量はどれくらいですか? 私はそれを分析するのに苦労しました。これは、別のスレッドで指定された問題の実装です: Algorithm to find max cost path of length N in matrix, from [0,0] to last row。しかし、私はここに来たばかりなので、スレッドにコメントするのに十分なポイントがありません (私は思います)?. 初めての投稿なので、間違っていたらすみません。
アルゴリズムは、メモ化を使用しcache[][][][]
ます。初期化中はcache[][][][]
-1 で埋められます。
メソッドは で呼び出されmaxPath(0,0,m,DOWN)
ます。ここで、m は歩数で、n<=m<=n^2 であり、方向は DOWN=0、LEFT=1、RIGHT=2 として定義されます。
function maxPath(i, j, fuel, direction)
if i = n OR j = n OR j < 0 OR fuel = 0 then
return 0;
end if
if cache[i][j][f-1][d] != -1 then
return cache[i][j][f - 1][d];
end if
ret := 0
acc+ = matrix[i][j]
ret:=max(ret,maxPath(i+1, j, fuel-1, DOWN))
if f > n - i then . If there is enough steps to move horizontally
if d = RIGHT or d = DOWN then
ret:=max(ret,maxPath(i, j+1, fuel-1, RIGHT))
end if
if d = LEFT or d = DOWN then
ret:=max(ret,maxPath(i, j-1, fuel-1, LEFT))
end if
end if
return cache[i,j,fuel-1,direction] = ret + matrix[i][j]
end function