线性搜索的循环不变量
如算法简介(http://mitpress.mit.edu/algorithms)所示,练习陈述如下:
输入:数组A [1 ... n]
输出:i,其中A [i] = v或未找到时为NIL
为LINEAR-SEARCH写一个伪代码,
扫描序列,
寻找v。使用循环不变量,
证明你的算法是正确的。
(确保你的循环不变
完善了三个必要的属性
- 初始化,维护,
终止。)
我没有创建算法的问题,但我没有得到的是我如何决定我的循环不变量。我认为我理解了循环不变量的概念,即在循环开始之前,在每次迭代的结束/开始时始终为真的条件,并且当循环结束时仍然为真。这通常是目标,例如,在插入排序时,迭代j,从j = 2开始,[1,j-1]元素始终排序。这对我来说很有意义。但对于线性搜索?我想不出任何东西,想到循环不变只是听起来太简单了。我明白了什么问题吗?我只能想到一些明显的东西(它是NIL或介于0和n之间)。非常感谢提前!
没有找到相关结果
已邀请:
7 个回复
秃拳割
,还没找到
,关于
之前的数组部分和关于
之后的数组部分,你能说一下
?
盛虱
埠仙俊
好按紊叉
循环不变:在
循环的第0次迭代开始时(第1-4行),
初始化:
这是真的,因为关于空集的任何陈述都是真的(真空)。 维护:假设在
循环的第0次迭代开始时循环不变量为真。如果
,则当前迭代是最后一次(参见终止部分),因为第3行被执行;否则,如果
,我们有
这意味着不变循环在下一次迭代开始时仍然为真(
)。 终止:
循环可能因两个原因而结束:
(第3行),如果
;
(
循环的最后一次测试),在这种情况下,我们处于
迭代的开始,因此循环不变量是
并返回
值(第4行)。 在这两种情况下,
都按预期结束。
纫合峭
谷起
我为循环不变量做了我自己的假设来检查线性搜索的正确性.....也许它完全错了所以我需要对我的假设提出建议。 1)在初始化时 - 在i = 0时,我们在i = 0处搜索v。 2)在连续的迭代中 - 我们正在寻找v直到i<则为a.length-1 3)在终止时,i = A.length,直到A.length,我们一直在寻找v。
膛嵌墒缅欠