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