更快地计算DP [n] [m]

时间:2015-06-12 10:28:16

标签: algorithm dynamic-programming

鉴于:DP[i][j]=DP[i-1][j] + DP[i-1][j-1]*C[i]

我想计算DP [n] [m]。我知道我可以计算所有DP [] []值,但我想要一个通常更大的N& M(高达45000)。 有没有办法更快地完成它?

2 个答案:

答案 0 :(得分:1)

时间复杂性我不认为没有任何额外信息你会变得更好。但是,您可以逐行计算矩阵,从而提高O(m)而不是Ω(N * M)的空间效率:

current_row = [X, 0, ...]
prev_row = [0,0,...]
for i := 1 to n:
  copy current_row to prev_row
  # TODO compute current_row[0], recurrence not given
  for j := 1 to i:
    current_row[j] = prev_row[j-1] + C*prev_row[j]

DP[n][m]将与最后的current_row[m]对应

答案 1 :(得分:0)

我完全排除了Niklas B.的答案,因为无法在复杂性方面实现更快的实现,但是您可以使用memoization而不是'true'动态编程。虽然它没有改善最坏情况的复杂性,但它可能导致计算较少的中间值。