《算法导论》习题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相等的值,算法正确。
相关文章推荐
- 算法导论三习题2.1-4代码实现
- 使用Java完成《算法导论》习题2.1-4
- 算法导论习题解析----2.1-4
- 算法导论第二版习题试解-第二章练习2.1
- 算法导论习题自作2.1-1
- 算法导论 习题2.1-4
- 算法导论习题2.1-4
- 算法导论习题自作2.1-2
- 《算法导论》课后习题 2.1-3
- 算法导论习题自做2.1-3
- 算法导论 课后习题 2.1-2
- 算法导论习题自做2.1-4
- 算法导论 课后习题 2.1-4
- 算法导论2.1-2习题解答(插入排序算法)
- 算法导论课后习题探究(前五章:基础知识)
- 算法导论习题[Exercises 32.1-3 ]
- 数据结构(C语言版)课后习题2.1
- (搬运)《算法导论》习题解答 Chapter 22.1-1(入度和出度)
- 《算法导论》第二章----两条习题
- 算法导论2.1-4——n个二进制数相加