这是数组中线性搜索的伪代码,如果找到数组中i
的所需元素,则返回索引,否则(来自 CLRS 书,第 3 版,练习 2.1-3):e
A
NIL
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
,所以循环不变量对任何1 < j < i
)。
以上是正确的吗?如果不是,您能否提供一个正确的循环不变量?
感谢您的关注。