运行时间应该是O(n),这是我提出的,是否正确?致谢
for (i = 1 ; i < A[n]; i++)
A[i] = 0
B[i] = 0;
for i in A[1..n]
B[i] = B[i] + A[i]
答案 0 :(得分:0)
是的,这是正确的。您的解决方案是dynamic programming的最简单的案例,这种技术可以大大加快解决方案的算法速度,可以从较小的子问题的解决方案构建。
您手头的问题恰好具有此属性:如果您获得B[n]
的解决方案,则可以在O(1)
中构建B[n-1]
的解决方案,这就是您的算法所做的,运行时间为O(N)
。
这样的解决方案在实践中非常有用:我曾经使用像你这样的算法来加速我的程序中的一段启动代码,从几分钟到几秒钟(它正在添加向量,所以它来自{{ 1}}到O(3)
)。