《算法导论》课后题--2--第二章(1)
2017-05-11 21:54
204 查看
2.3-2
分析:该题是对课本例子的简单改写;
作答:
2.3-3
分析:本题考查“数学归纳法”;
证明:
当k = 1时,
,由题中递归式得:
,该结果与待证明的式子结果相等:
,故成立;
假设当k = i (i > 1)时,有递归式的解为
成立;
当k = i + 1时,由题目得:
,成立
所以,
对当k >= 1时均成立。
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
2.3-4
分析:本题考查递归式的书写,内容是“插入排序递归版”;
作答:
,i为输入规模;
经简单分析得:
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
2.3-5
分析:考查迭代,递归算法,伪代码书写,分析算法时间复杂度;
作答:(假设输入A为单调不减序列)
(1)迭代版:
BINARY-SEARCH(A,v)
1 L = 1 //记录数组索引下界
2 H = A.length //记录数组索引上界
3 M = (L + H) / 2 //记录数组中间位置的索引
4 while L <= H
5 if A[M] == v
6 return M
7 elseif A[M] > v
8 H = M - 1
9 M = (L + H) / 2
10 elseif A[M] < v
11 L = M + 1
12 M = (L + H) / 2
13 return NIL(2)递归版:
//p,q记录要考查的子数组在A中的范围索引
//p表示下界,q表示上界
BINARY-SEARCH(A,p,q,v)
1 if p > q //递归出口1
2 return NIL
3 elseif p == q //递归出口2
4 if A[p] == v
5 return p
6 else return NIL
7 else L = p
8 H = q
9 M = (L + H) / 2
10 if A[M] == v
11 return M
12 elseif A[M] > v
13 return BINARY-SEARCH(A,L,M-1,v)
14 elseif A[M] < v
15 return BINARY-SEARCH(A,M+1,H,v)关于时间复杂度为
的证明,水平有限,没能给出详细过程;但是,简单分析下,从迭代版可知,时间复杂度主要取决于while循环迭代的次数,而长度为n的数组,在最坏情况下,只能当问题规模缩减为1时才能求解,所以,问题规模由n以每次缩减一半规模的速度降至1,只用缩减lgn的量级的次数就可以实现。
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
加油!!!
分析:该题是对课本例子的简单改写;
作答:
MERGE(A,p,q,r) 1 n1 = q - p + 1 2 n2 = r - q 3 let L[1..n1] and R[1..n2] be new arrays 4 for i = 1 to n1 5 L[i] = A[p+i-1] 6 for j = 1 to n2 7 R[j] = A[q+j] 8 i = 1 9 j = 1 10 k = q 11 while i <= n1 and j <= n2 12 if L[i] <= R[j] 13 A[k] = L[i] 14 i = i + 1 15 else A[k] = R[j] 16 j = j + 1 17 k = k + 1 18 if i <= n1 19 for i to n1 20 A[k] = L[i] 21 k = k + 1 22 else for j to n2 23 A[k] = R[j] 24 k = k + 1-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
2.3-3
分析:本题考查“数学归纳法”;
证明:
当k = 1时,
,由题中递归式得:
,该结果与待证明的式子结果相等:
,故成立;
假设当k = i (i > 1)时,有递归式的解为
成立;
当k = i + 1时,由题目得:
,成立
所以,
对当k >= 1时均成立。
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
2.3-4
分析:本题考查递归式的书写,内容是“插入排序递归版”;
作答:
INSERTION-SORT(A) //假设排成不减序列 1 if A.length == 1 //假设输入的数组为有效输入 2 return 3 else INSERTION-SORT(A[1..A.length-1]) //规模缩减 4 INSERT(A[1..A.length-1],A[A.length])//结果合并 5 return 注:INSERT(A[1..i],v)函数实现将单个值插入到已排好序的数组A中 INSERT(A[1..i],v) //i取值在整个A的长度范围内 1 j = i 2 while j >= 1 and A[j] > v 3 A[j+1] = A[j] 4 j = j - 1 5 A[j+1] = v //将v插入到正确的位置对于最坏情况时,INSERT函数的时间复杂度为:
,i为输入规模;
经简单分析得:
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
2.3-5
分析:考查迭代,递归算法,伪代码书写,分析算法时间复杂度;
作答:(假设输入A为单调不减序列)
(1)迭代版:
BINARY-SEARCH(A,v)
1 L = 1 //记录数组索引下界
2 H = A.length //记录数组索引上界
3 M = (L + H) / 2 //记录数组中间位置的索引
4 while L <= H
5 if A[M] == v
6 return M
7 elseif A[M] > v
8 H = M - 1
9 M = (L + H) / 2
10 elseif A[M] < v
11 L = M + 1
12 M = (L + H) / 2
13 return NIL(2)递归版:
//p,q记录要考查的子数组在A中的范围索引
//p表示下界,q表示上界
BINARY-SEARCH(A,p,q,v)
1 if p > q //递归出口1
2 return NIL
3 elseif p == q //递归出口2
4 if A[p] == v
5 return p
6 else return NIL
7 else L = p
8 H = q
9 M = (L + H) / 2
10 if A[M] == v
11 return M
12 elseif A[M] > v
13 return BINARY-SEARCH(A,L,M-1,v)
14 elseif A[M] < v
15 return BINARY-SEARCH(A,M+1,H,v)关于时间复杂度为
的证明,水平有限,没能给出详细过程;但是,简单分析下,从迭代版可知,时间复杂度主要取决于while循环迭代的次数,而长度为n的数组,在最坏情况下,只能当问题规模缩减为1时才能求解,所以,问题规模由n以每次缩减一半规模的速度降至1,只用缩减lgn的量级的次数就可以实现。
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
加油!!!
相关文章推荐
- 算法导论课后习题解析 第二章
- 算法导论第二章课后习题代码实现
- 算法导论课后习题第二章(1)
- 算法导论课后习题解析 第二章
- 《算法导论》系列课后思考题之-第二章《算法入门》
- 算法导论课后习题第二章(2)
- 《算法导论》课后题--1--第二章(0)
- 《算法导论》课后题--3--第二章(2)
- 《算法导论》第二章----插入排序(伪代码实现、课后习题(递归版本、二分查找策略版本))
- 算法导论课后习题解析 第六章
- 《算法导论》系列课后思考题之-第三章《函数的增长》(上)
- The C programing language 第二章课后题
- 算法导论 第6章堆排序 课后习题
- C++Primer 中文版 第五版 第二章课后习题答案
- 《算法导论》课后习题 9.1-1
- python学习第二章变量和简单数据类型的部分课后练习自己尝试的代码
- 第二章课后练习
- 《学习OpenCV》第二章 课后题5
- 算法导论实验:第二章插入排序 P10
- 算法导论实验:第二章插入排序 P10