算法第二章习题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第2章习题
1. 证明当0>k a 时,任何多项式011...)(a n a n a n p k k k k +++=--属于集合)(k n Θ
解:110...()
lim lim k k k k k k k n n a n a n a p n a n n
--→∞→∞+++==>0 所以011...)(a n a n a n p k k k k +++=--∈)(k n Θ
2. 对于下列每一种函数,指出它们属于哪一种))((n g Θ类型(尽量使用最简单的g(n)),并给出证明。
a. 102)1(+n
b. 37102++n n
c. 2
lg )2()2lg(222n
n n n +++
d. 1132-++n n
e. ⎣⎦n 2log
解: a. 20118216
210
20202020...1(1)lim lim 1n n n C n C n n n n
→∞→∞+++++==
所以 102)1(+n ∈20()n Θ
b. lim 1n n n →∞==
所以
37102++n n ∈()n Θ
c. 由于22lg(2)n n +∈(lg )n n Θ,2(2)lg 2
n
n +∈2(lg )n n Θ。显然,当n →∞
时,2
lg n n >nlgn ,所以2
lg
)2()2lg(22
2
n
n n n +++∈2(lg )n n Θ
d. 由于12+n ∈(2)n Θ,13-n ∈(lg )n Θ。显然,当n →∞
时,3n
>2n
,所
以11
32
-++n n ∈(3)n Θ
e. n 2log ≤⎣⎦n 2log 所以⎣⎦n 2log ∈(lg )n Θ 3. 写出下列表达式的结果: a. ∑∑==n i n j ij 1 1 b. ∑=+n i i i 1 )1(/1 c. ∑-=+1 1 )1(n i i i a.解: 4 )1(2)1(2)1(2 )1(2 )1(2 21 1 1 1 +=+∙+= +=+= ∑∑ ∑∑====n n n n n n i n n i n n ij n i n i n i n j b.解: 1 1111 1 1...3121211)1(1...321211)1(/11 +=+- =+-++-+-=+++⨯+⨯= +∑=n n n n n n n i i n i c.解: 3 ) 1()1(2)1(6)12()1()1(1 1 1 1 2 1 1 +-= -+--= + = +∑∑∑-=-=-=n n n n n n n n i i i i n i n i n i 4. 计算增长次数(即写出下列和的))((n g Θ) a. ∑-=+1 2 )1(n i i b ∑-=1 2 2 lg n i i c ∑=-+n i i i 2 1 2 )1( d ∑∑-=-=+101 )(n i i j j i 解:a. 3 ()n Θ b. 21 301 1()n n n i j i k i n --==+==Θ∑∑∑ c. (2)n n Θ∙ d.3 ()n Θ 5. n x x ,...,1的采样方差n 可以这样计算: () 1 1 2 --∑=n x x n i i ,其中n x x n i i ∑== 1 或者 1 2 112 -⎪⎪⎭⎫ ⎝⎛-∑∑==n n x x n i i n i i 根据每个公式,对求方差时需要用到的除法、乘法和加/减运算的次数进行计算和比较。 解:第一个公式: 除法:2次, 乘法:n 次, 加/减法:3n-1次 第二个公式:除法:2次, 乘法:n+1次, 加/减法:2n 次 6. 考虑下面的算法 算法secret(A[0..n-1]) //输入:包含n个实数的数组A minval ←A[0]; maxval ← A[0] for i ← 0 to n-1 do if A[i] < minval minval ← A[i] if A[j] > maxval maxval ← A[i] return maxval-minval 对于本算法,试回答下述问题: 1)该算法求的是什么? 2)它的基本操作是什么? 3)该基本操作执行了多少次? 4)该算法的效率类型是什么? 5)对该算法进行改进,若不可能,试证明之。 解:1)数组中最大的元素与最小元素之差 2)比较大小 3)2n次 4)()n Θ 5)可以使用 if A[i] < minval minval ← A[i] else if A[j] > maxval maxval ← A[i] 替换 if A[i] < minval minval ← A[i] if A[j] > maxval maxval ← A[i] 在输入并非最糟糕的情况下,能在一定程度上提升算法的效率。7.已知算法GE如下: 算法GE(A[0..n-1, 0..n]) // 输入: 一个n行n+1列的实数矩阵A for i ←0 to n-2 do for j ← i+1 to n-1 do for k ← i to n do A[j,k] ←A[j,k] – A[i,k] * A[j,i]/A[i,i] 试问: 1)该算法的时间效率类型 2)该算法有何性能缺陷,试改进之。 解:1)将循环最内层的A[j,k] ←A[j,k] – A[i,k] * A[j,i]/A[i,i]中的乘法M(n)