循环不变并用于解算算法?

时间:2015-09-17 05:08:28

标签: algorithm loop-invariant

所以,如果我有以下代码:

test()

我现在必须找到一个循环不变量。我被告知,对于这样的循环,Y = i ^ 2的不变量被认为是循环不变量,但是我不知道我是否知道如何证明它是循环不变量。既然Y只是某种东西,那么它在循环之前,期间和之后总是如此,因为它就是我所用的......这是一个有效的证明它是不变的吗?

另外,当谈到用不变量证明算法时,可以说sum = i * i的1到n之和(或Y,循环不变量)= n(n + 1)( 2N + 1)/ 6

然后使用归纳法证明这是正确的?是否正确使用循环不变量来证明算法?

会喜欢一些帮助:)

1 个答案:

答案 0 :(得分:1)

对于任何i

,在循环的入口处应该是不变量
sum = 0 + 1*1 + 2*2 + ... + (i-1)*(i-1)

上述说法可以通过归纳证明。让sum成为循环开头的变量,sum'变量位于结尾,然后:

sum' = sum + i*i = 0 + 1*1 + ... + i*i

这允许您使用以下事实:当循环终止i=n+1时,所以当程序终止时,您会得到:

sum = 0 + 1*1 + ... + n*n