【发布时间】:2016-03-03 16:59:48
【问题描述】:
这是在数组中进行线性搜索的伪代码,如果在数组 A 中找到所需的元素 e,则返回索引 i,否则返回 NIL(来自 CLRS book,第 3 版,练习2.1-3):
LINEAR_SEARCH (A, e)
for i = 1 to A.length
if A[i] == e
return i
return NIL
我试图从中推断出一个不变量的循环,所以根据我的理解,我认为它的代表是这样一个事实,即在循环中的任何给定时刻,子数组 A[1..i-1] 只包含相等性测试被证明是错误的。
具体来说,在第一次迭代之前i-1 == 0 这意味着子数组的长度为空,因此不能有一个元素v 属于它,这样v == e。在任何下一次迭代之前,作为等式测试也是退出条件,假定的不变属性必须仍然成立,否则循环将已经结束。在终止时,要么函数即将返回一个索引(在这种情况下,循环不变量是微不足道的),要么返回 NIL(在这种情况下i == A.length + 1,所以循环不变量对任何 @987654331 都成立@)。
上面说的对吗?如果不是,您能否提供一个正确的循环不变量?
感谢您的关注。
【问题讨论】:
标签: algorithm loops clrs loop-invariant