两个伪代码之间的区别?

时间:2012-10-28 17:06:40

标签: algorithm pseudocode

PrefixAverages1(X)
Input: X, a 1-D numerical array of size n
1) Let A = an empty 1-D numerical array of size n
2) For i = 0 to n-1
3)    Let s = X[0]
4)    For j = 1 to i
5)       Let s = s + X[j]
6)    End For
7)   Let A[i] = s /(i+1)
8) End For
Output: An n-element array A of numbers such that A[i]
    is the average of elements X[0],X[1], … ,X[i]


PrefixAverages2(X)
Input: X, a 1-D numerical array of size n
1) Let A = an empty 1-D numerical array of size n
2) Let s = 0
3) For i = 0 to n-1
4)    Let s = s + X[i]
5)    Let A[i] = s / (i+1)
6) End For
Output: An n-element array A of numbers such that A[i]
    is the average of elements X[0],X[1], … ,X[i]

所以这就是我目前所知道的:

第一个算法使用第二个嵌套for循环。 第二个更有效率。 在第一个中,S等于数组的第一个元素。在第二个中,S等于0.

我还缺少什么?任何帮助都将非常感谢,谢谢!

1 个答案:

答案 0 :(得分:0)

在两种算法中,在每次迭代结束时,S等于从0到i的所有元素的总和。

在第二个算法中,直到第一次迭代,还没有看到任何元素,使得总和为0.

在第一个中,计算S的循环从1开始计数。因为它永远不会查看X[0],所以必须在其他位置添加,以使得总和正确。因此S已经开始包括X[0]。 (即使对于空列表,这也是安全的,因为在空列表中我们永远不会计算总和。)

如果您更改了第一个算法的求和循环,使其从0开始计数,那么S将从0开始。我认为这不是那样做的,因为作者是微优化的,并且没有看到初始化为0的点,然后在他已经知道它的时候立即添加X[0]