【发布时间】:2011-07-31 21:33:30
【问题描述】:
从算法简介 (http://mitpress.mit.edu/algorithms) 中可以看出,该练习陈述如下:
输入:数组A[1..n]和一个值v
输出: 索引i,其中A[i] = v 或NIL 如果在v 中找不到A
为 LINEAR-SEARCH 编写伪代码, 它扫描序列, 寻找 v. 使用循环不变量, 证明你的算法是正确的。 (确保你的循环不变 满足三个必要的属性 – 初始化、维护、 终止。)
我创建算法没有问题,但我不知道如何确定我的循环不变量。我想我理解了循环不变量的概念,即在循环开始之前、每次迭代的结束/开始时始终为真并且在循环结束时仍然为真的条件。这通常是目标,例如,在insertion sort,迭代j,从j = 2 开始,A[1..j-1] 元素总是被排序的。这对我来说很有意义。但是对于线性搜索?我什么都想不出来,想一个循环不变量听起来太简单了。我理解错了吗?我只能想到一些明显的东西(它不是 NIL 就是介于 0 和 n 之间)。提前非常感谢!
【问题讨论】:
标签: algorithm invariants loop-invariant