我遇到了关于循环不变量的以下问题:
考虑
x=4;
for(i=5;i<k;i++) {
a=a+x+i;
x=x*2;
}
使用a和x的闭合公式定义适当的循环不变量。
现在, 你怎么知道你在这里有正确的循环不变量?我的意思是你可以将循环不变量设置为: “在第j次迭代'x'小于'a'”这将是正确的,但不会使用任何封闭的公式吗?
当循环结束时,如何使用语句(循环不变量)来确定“a”的值? 我见过的所有例子都说明了循环不变量,而不是用作闭合公式。
有什么想法吗?
感谢您的所有帮助。
答案 0 :(得分:2)
从封闭的公式开始:清楚地表示x(j)[表示从0到k-5的j],x表示在循环的第j个腿,x(j+1) = x(j) * 2
,所以,{{1 } x(j)
(使用4 * 2**j
表示“加注到权力”),因为**
是4;和x(0)
- 我们没有被告知a(j+1) = a(j) + x(j) + j + 5
是什么,但我们可以将其分解并将a(0)
写为a(j)
。考虑到a(0) +
的上述封闭公式资源,你能弄明白那是什么吗?我不愿意做你的功课 - 你还没有开始学习Concrete Mathematics或者你的教科书是什么......?
一旦你写下了x(j)
的封闭形式公式,与我为a(j)
提供的那些微不足道的公式一起,你能看到他们如何结合使一个循环不变... ?