算法第二章习题

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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)

相关文档
最新文档