您的位置:首页 > 其它

《算法导论》习题2.1-3

2017-03-27 22:33 549 查看

题目

考虑以下查找问题:

输入: n个数的一个序列A={ a1, a2, ..., an } 和一个值v。

输出: 下标i使得v=A[i]或者当v不在A中时,v为特殊值NIL。

写出线性查找 的伪代码,它扫描整个序列来查找v。使用一个循环不变式来证明你的算法是正确的。确保循环不变式满足三条必要的性质。

解答

注意:自己写的,不是标准答案,欢迎交流

伪代码:

FIND-KEY(A, v)
for i = 1 to A.length
if A[i] == v
return i
return NIL


循环不变式:对于每次循环迭代,子数组(已遍历的元素)中没有与v相等的值。

初始化:第一次循环之前,i = 1,子数组没有元素,其中肯定没有与v相等的值,循环不变式成立。

保持:每次迭代都将比较A[i]与v的值,如果相等,循环终止;如果不等,A[1…i]中没有与v相等的值,循环不变式保持。

终止:当i > A.length 时或者A[i] == v 时循环终止。显然对于子数组即下标小于i的所有元素均没有与v相等的值,算法正确。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法导论 算法