2.1-1:以图2-2为模型,说明INSERTION-SORT在数组A=<31,41,59,26,41,58>上的执行过程。
2.1-2:重写过程INSERTION-SORT,使之按非升序(而不是按非降序)排序。
注意,跟之前升序的写法只有一个地方不一样:
2.1-3:考虑下面的查找问题:
输入:一列数A=<a1,a2,…,an >和一个值v
输出:下标i,使得v=A[i],或者当v不在A中出现时为NIL。
写出针对这个问题的现行查找的伪代码,它顺序地扫描整个序列以查找v。
利用循环不变式证明算法的正确性。确保所给出的循环不变式满足三个必要的性质。
(2.1-3 Consider the searching problem:
Input: A sequence of n numbers A D ha1; a2; : : : ;ani and a value _.
Output: An index i such that _ D AOEi_ or the special value NIL if _ does not appear in A.
Write pseudocode for linear search, which scans through the sequence, looking for _. Using a loop invariant, prove that your algorithm is correct. Make sure that your loop invariant fulfills the three necessary properties.)
LINEAR-SEARCH(A,v)
1 for i=1 to A.length
2 if v = A[i]
3 return i
4 return NIL
现行查找算法正确性的证明。
初始化: i=1,子数组为A[1..i],只有一个元素A[1],如果v=A[1]就返回1,否则返回NIL,算法显然是正确的。
保持:若算法对数组A[1..i]正确,则在数组增加一个元素A[i+1]时,只需要多作一次比较,因此显然对A[1..i+1]也正确。
终止:算法如果在非最坏情况下定能返回一个值此时查找成功,如果n次查找(遍历了所有的数)都没有成功,则返回NIL。算法在有限次查找后肯定能够给出一个返回值,要么说明查找成功并给出下标,要么说明无此值。因此算法正确。
2.1-4:有两个各存放在数组A和B中的n位二进制整数,考虑它们的相加问题。两个整数的和以二进制形式存放在具有(n+1)个元素的数组C中。请给出这个问题的形式化描述,并写出伪代码。
(Consider the problem of adding two n-bit binary integers, stored in two n-element arrays A and B. The sum of the two integers should be stored in binary form in an (n+1)-element array C. State the problem formally and write pseudocode for adding the two integers.)
A存放了一个二进制n位整数的各位数值,B存放了另一个同样是二进制n位整数的各位上的数值,现在通过二进制的加法对这两个数进行计算,结果以二进制形式把各位上的数值存放在数组C(n+1位)中。注意这里的增加需要考虑进位的问题。
该问题主要是判断一下进位。A[i] + B[i] + C[i], 其中C[i]为进位标志。
/**整数和代码,其中n为A和B的二进制位数*/
for(i = 0; i < n; i++) {
if (A[i] + B[i] +C[i] == 0) {
C[i] = 0;
} else if(A[i] + B[i] + C[i] == 1) {
C[i] = 1;
} else if(A[i] + B[i] + C[i] == 2) {
C[i] = 0;
C[i + 1] = 1;
} else if(A[i] + B[i] + C[i] == 3) {
C[i] = 1;
C[i + 1] = 1;
}
}
一个更简单明了的伪代码:
BINARY-ADD(A,B,C)
flag = 0 // 需要进位标志
for j=1 to n
key=A[j]+B[j]+flag
C[j] = key mod 2
flag = key / 2 // 获得进位
参考资料:
http://www.cnblogs.com/sinoxavier/archive/2012/11/23/2785077.html
http://qiemengdao.iteye.com/blog/1328678
http://www.cnblogs.com/timebug/archive/2010/03/09/1682020.html
http://blog.csdn.net/puweilan/article/details/6613396
https://github.com/Airead/excise/blob/master/algorithms/algorithms.org