我写了下面的代码大纲,基本上是对一个数组 (a) 求和,其中每个元素都乘以一个值 x^i:
y = a(0)
i = 0
{y = sum from i=0 to (n-1) a(i) * x^i AND 0 <= n <= a.length} //Invariant
while (i < (n-1))
{y = sum from i=0 to (n-1) a(i) * x^i AND 0 <= n <= a.length AND i < (n-1)}
y = y + a(i)*x^i
i = i + 1
end while
{y = sum from i=0 to (n-1) a(i) * x^i} //Postcondition
请注意,我不希望代码编译 - 它只是代码应该如何工作的合理概述。我需要通过使用跟踪变量来提高代码的效率,因此需要使用链接不变量将所述变量与代码的其余部分连接起来。这就是我卡住的地方。在这种情况下跟踪什么有用?我曾考虑在每次迭代中保留总和值,但我不确定这是否有效。如果我能弄清楚要跟踪什么,我很确定将它链接到空间将是微不足道的。谁能看到我的算法如何通过跟踪变量得到改进?