给定一个数组A [1..n]作为输入,填入第二个数组B [1..n],使得B [i] = A [1] + ... + A [i]

时间:2012-07-21 11:08:20

标签: arrays sum pseudocode

运行时间应该是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]

1 个答案:

答案 0 :(得分:0)

是的,这是正确的。您的解决方案是dynamic programming的最简单的案例,这种技术可以大大加快解决方案的算法速度,可以从较小的子问题的解决方案构建。

您手头的问题恰好具有此属性:如果您获得B[n]的解决方案,则可以在O(1)中构建B[n-1]的解决方案,这就是您的算法所做的,运行时间为O(N)

这样的解决方案在实践中非常有用:我曾经使用像你这样的算法来加速我的程序中的一段启动代码,从几分钟到几秒钟(它正在添加向量,所以它来自{{ 1}}到O(3))。