算法导论2.1 Exercises 答案
2.1-1
\(\begin{aligned} &[],[31,41,59,26,41,58]\\ &[\underline{31}],[41,59,26,41,58]\\ &[31,\underline{41}],[59,26,41,58]\\ &[31,41,\underline{59}],[26,41,58]\\ &[\underline{26},31,41,59],[41,58]\\ &[26,31,41,\underline{41},59],[58]\\ &[26,31,41,41,\underline{58},59],[] \end{aligned}\)
2.1-2
初始化:一开始时求了前\(0\)个元素的和,也就是说不包含任何数。
保持:在迭代到第\(i\)个元素时,\(sum\)是数组\(A[1:i-1]\)的元素之和。添加上\(A[i]\)后,\(sum\)就成为了数组\(A[1:i]\)的元素之和。
终止:最终,通过下标\(i\)迭代了每一个元素,只要超过了长度\(n\),循环终止。因此整个算法是正确的。此时就有\(sum=A[1:n]\)。
2.1-3
1 | INSERTION-SORT(A, n) |
这时候在插入的元素的位置,右边全是比它小的,左边全是比它大的。
2.1-4
1 | LINEAR-SEARCH(A, n, x) |
循环不变量:\(A[1:i-1]\)中都不包含数\(x\)。
初始化:迭代开始前处理的是空数组,并没有发现和\(x\)的元素。
保持:在数组\(A[1:i-1]\)没有发现\(x\)的基础上,判断\(A[i]\)是否和\(x\)相等。如果相等,那么及时返回下标\(i\),循环不变量\(A[1:i-1]\)依旧不包含\(x\);否则说明数组\(A[1:i]\)也没有发现\(x\)。
终止:如果找到了一个\(i\)使得\(A[i]=x\),那么算法立刻返回当前下标,算法提前结束。当直到循环结束时,下标\(i\)的值已经为\(n+1\),这说明数组\(A[1,n]\)并没有发现\(x\),故返回NIL
,算法正确结束。
2.1-5
1 | ADD-BINARY-INTEGERS(A, B, n) |