线性搜索循环的伪代码:
for j = 1 to A.length
if(A[j] = v)
return j;
return NIL
我写的循环不变量:
在 for 循环的每次迭代开始时,j是A[j-1]不等于v之后的下一个索引。
初始化:
当j等于1并且在检查它是否小于A.length之前,前一个索引是0。那么A[0]不等于v,因为在这种情况下A[0]甚至不存在。
维护:
如果A[j]等于v则循环终止。这意味着我们没有下一次迭代。但是如果它不等于v那么循环的下一次迭代将在保持循环不变性的同时执行。
终止:
导致 for 循环终止的条件是j大于A.length或v等于A[j]。因为每次循环迭代都将j增加1,所以我们检查了A 的每个元素对v直到j大于A.length。因此算法是正确的。如果v等于A[j]那么这意味着我们已经找到了我们一直在搜索的元素。因此算法是正确的。
这些是正确的吗?