《算法导论》课后题--2--第二章(1)
来源:互联网 发布:测试心理的软件 编辑:程序博客网 时间:2024/05/22 09:40
2.3-2
分析:该题是对课本例子的简单改写;
作答:
MERGE(A,p,q,r)1n1 = q - p + 12n2 = r - q3let L[1..n1] and R[1..n2] be new arrays4for i = 1 to n15L[i] = A[p+i-1]6for j = 1 to n27R[j] = A[q+j]8i = 19j = 110k = q11while i <= n1 and j <= n212if L[i] <= R[j]13A[k] = L[i]14i = i + 115else A[k] = R[j]16j = j + 117k = k + 118if i <= n119for i to n120A[k] = L[i]21k = k + 122else for j to n223A[k] = R[j]24k = k + 1-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
2.3-3
分析:本题考查“数学归纳法”;
证明:
当k = 1时,,由题中递归式得:,该结果与待证明的式子结果相等:,故成立;
假设当k = i (i > 1)时,有递归式的解为成立;
当k = i + 1时,由题目得:
,成立
所以, 对当k >= 1时均成立。
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
2.3-4
分析:本题考查递归式的书写,内容是“插入排序递归版”;
作答:
INSERTION-SORT(A)//假设排成不减序列1if A.length == 1//假设输入的数组为有效输入2return3else INSERTION-SORT(A[1..A.length-1])//规模缩减4INSERT(A[1..A.length-1],A[A.length])//结果合并5return注:INSERT(A[1..i],v)函数实现将单个值插入到已排好序的数组A中INSERT(A[1..i],v)//i取值在整个A的长度范围内1j = i2while j >= 1 and A[j] > v3A[j+1] = A[j]4j = j - 15A[j+1] = v//将v插入到正确的位置对于最坏情况时,INSERT函数的时间复杂度为:,i为输入规模;
经简单分析得:
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
2.3-5
分析:考查迭代,递归算法,伪代码书写,分析算法时间复杂度;
作答:(假设输入A为单调不减序列)
(1)迭代版:
BINARY-SEARCH(A,v)1L = 1//记录数组索引下界2H = A.length//记录数组索引上界3M = (L + H) / 2//记录数组中间位置的索引4while L <= H5if A[M] == v6return M7elseif A[M] > v8H = M - 19M = (L + H) / 210elseif A[M] < v11L = M + 112M = (L + H) / 213return NIL(2)递归版:
//p,q记录要考查的子数组在A中的范围索引//p表示下界,q表示上界BINARY-SEARCH(A,p,q,v)1if p > q //递归出口12return NIL3elseif p == q //递归出口24if A[p] == v5return p6else return NIL7else L = p8H = q9M = (L + H) / 210if A[M] == v11return M12elseif A[M] > v13return BINARY-SEARCH(A,L,M-1,v)14elseif A[M] < v15return BINARY-SEARCH(A,M+1,H,v)关于时间复杂度为的证明,水平有限,没能给出详细过程;但是,简单分析下,从迭代版可知,时间复杂度主要取决于while循环迭代的次数,而长度为n的数组,在最坏情况下,只能当问题规模缩减为1时才能求解,所以,问题规模由n以每次缩减一半规模的速度降至1,只用缩减lgn的量级的次数就可以实现。
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
加油!!!
- 《算法导论》课后题--2--第二章(1)
- 《算法导论》课后题--3--第二章(2)
- 《算法导论》课后题--1--第二章(0)
- 算法导论(三版):第二章第一节课后题
- 算法导论课后习题第二章(2)
- 算法导论课后习题第二章(1)
- 算法导论(三版):第二章第二节课后题
- 算法导论课后习题解析 第二章
- 算法导论(三版):第二章第三节课后题
- 《算法导论》课后题--7--第四章(2)
- 《算法导论》课后题--6--第四章(1)
- 《算法导论》系列课后思考题之-第二章《算法入门》
- 算法导论第二章课后习题代码实现
- 算法导论(三版):第一章第二节课后题 以及 第一章思考题
- 《算法导论》课后题--5--第四章(0)
- 《算法导论》课后题--4--第三章
- 算法导论第二章
- 算法导论第二章
- List和数组之间的相互转换
- 虚拟机上实现linux自动上网
- Ubuntu 16.10 搭建 hadoop 2.7.3 完全集群
- FFMPEG 初探
- J2EE开发笔记(四)—— pom.xml文件详解
- 《算法导论》课后题--2--第二章(1)
- 串口发送数据——字符串发送与十六进制发送的区别
- Mina简介
- poj 2356 鹊巢原理
- php获取时间
- 机器学习算法(精简版)
- Struts2 获取表单数据到实体的三种方法
- bzoj1303
- Spark(1)-初识Pyspark