《算法导论》习题答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Chapter2 Getting Start
2.1 Insertion sort
2.1.2 将Insertion-Sort 重写为按非递减顺序排序
2.1.3 计算两个n 位的二进制数组之和
2.2 Analyzing algorithms
2.2.1将函数32/10001001003n n n --+用符号Θ表示
2.2.2写出选择排序算法selection-sort
当前n-1个元素排好序后,第n 个元素已经是最大的元素了.
最好时间和最坏时间均为2()n Θ
2.3 Designing algorithms
2.3.3 计算递归方程的解
22()2(/2)2,1k if n T n T n n if n for k =⎧=⎨+ = >⎩ (1) 当1k =时,2n =,显然有()lg T n n n =
(2) 假设当k i =时公式成立,即()lg 2lg 22i i i T n n n i ===⋅,
则当1k i =+,即12i n +=时,
111111()(2)2(2)222(1)22lg(2)lg i i i i i i i i T n T T i i n n ++++++==+=⋅+=+== ()lg T n n n ∴ =
2.3.4 给出insertion sort 的递归版本的递归式
(1)1()(1)()1
if n T n T n n if n Θ =⎧=⎨-+Θ >⎩
2.3-6 使用二分查找来替代insertion-sort 中while 循环内的线性扫描,是否可以将算法的时间提高到(lg )n n Θ?
虽然用二分查找法可以将查找正确位置的时间复杂度降下来,但是移位操作的复杂度并没有减少,所以最坏情况下该算法的时间复杂度依然是2()n Θ
2.3-7 给出一个算法,使得其能在(lg )n n Θ的时间内找出在一个n 元素的整数数组内,是否存在两个元素之和为x
首先利用快速排序将数组排序,时间(lg )n n Θ,然后再进行查找: Search(A,n,x)
QuickSort(A,n);
i←1; j←n;
while A[i]+A[j]≠x and i<j
if A[i]+A[j]<x
i←i+1
else
j←j -1
if A[i]+A[j]=x
return true
else
return false
时间复杂度为)(n Θ。
或者也可以先固定一个元素然后去二分查找x 减去元素的差,复杂度为)lg (n n Θ。
Chapter3 Growth of functions
3.1Asymptotic notation
3.1.2证明对于0b >,()()b b n a n +=Θ
0a >时,()()2b b b b n a n n n +<+=
()b b
n a n +> 对于121,2b c c ==,12()b b b c n n a c n <+<
0a <时,()b b n a n +<
存在02n a >-,当0n n >时,()(/2)b b
n a n +> 对于122,1b c c -==,12()b b b c n n a c n <+<
3.1-4 判断122()n n n O +与2是否等于2
3.1.6 证明如果算法的运行时间为(())g n Θ,如果其最坏运行时间为(())O g n ,最佳运行时间为(())g n Ω。
最坏时间(())O g n ,即2()T c g n <;
最佳时间(())g n Ω,即1()T c g n >
(())T g n ∴=Θ
3.1.7:证明(())(())o g n g n ω⋂=Φ
定义
3.2 Standard notation and common functions
3.2.2 证明log log b b
c a a c = log log lg lg lg log lg lg lg lg lg log lg lg b b c b a b a c a c a b a c c a c b
==
== log log b b c a a c ∴ =
3.2.3证明lg(!)(lg )n n n =Θ
!(2)!()n n n and n o n ω= = 112/2/2/21111lg !lg lg lg 1lg [lg lg()]lg[()]lg(
)lg lg 42n n
i i n n n n i i i i n i n n n
n i i n i i n i n n n n n =======<==+-=->=->∑∑∑∑∑∑
lg(!)(lg )n n n ∴ =Θ
/2
2
i 1n>4()2!()2,!(2)n n n i n i n i n i n ω=->∴=->∴=∏当时,, !,!()n n n n n o n <∴=
3.2.4lg !n ⎡⎤⎢⎥与lglg n ⎡
⎤⎢⎥!是否多项式有界 设lg n=m ,则2(ln 1)ln 1ln ln !()()m m m m m m n m m m e e m n e e
--=>=>> ∴lg n !不是多项式有界的。
21
1122
2lg lg !(2)22lg lg 12lg lg !2lg lg m m m m m m m n m m m n m n n n n ---=<<=<⎡⎤⎢⎥≥-≥<≤∴⎡⎤⎡⎤⎢⎥⎢⎥设,, 是多项式有界的
3.2.5比较lg(lg*n)与lg*(lg n )
lg*(lgn)= lg*n-1
设lg*n=x ,lgx<x-1
∴ lg*(lgn)较大。
Chapter4 Recurrences
4.1 The recursion-tree
4.1.1 证明T()()1n n T =⎡⎤+2的解为(lg )O n
lg )lg(/21)n-2b+2()clg(-b+1)+1=clg()+1=clg(n-2b+2)-clg2+1clg(n-b)2
n n c b c n b n T n ⎡⎤≤⎡⎤-≤-+22≤≤2假设T()(则 ()(lg )T n O n ∴=
4.1.2 证明()2()T n T n n =⎣/2⎦+的解为(lg )O n n
设()lg T n c n n /2≥⎣/2⎦⎣/2+1⎦
()2lg lg (1)lg(/2)lg lg (lg 1)(lg 2)
T n c n n n c n n n
c n n n cn n c n cn n cn n n c n n ≥⎣/2⎦⎣/2+1⎦+=⎣/2+1⎦ ⎣⎦+≥-+=--+=++-+
lg 1lg(1)n n +≥+,当1/3,(lg 2)c n c n n <>+
()lg(1),()(lg )T n cn n T n n n ≥+∴=Ω
()(lg )T n O n n ∴=
4.1.3
将假设改为T(n) = cn lgn +b ,只需要在T(1)=1的情况下成立。
4.1.6 计算
()21T n T =+的解
令/2lg ,(2)2(2)1m m m n T T ==+
令T(n)=S(m),则()2(/2)1S m S m =+
其解为()(),()()(lg )S m m T n S m n =Θ∴==Θ
4.2 The recursion-tree method
4.2.1 lg3()()T n n =Θ
4.2.2 略
4.2.3 2()()T n n =Θ
4.2.5 ()(lg )T n n n =Θ
4.3 The master method
4.3.1 略
4.3.4 主方法是否适用方程2()4(/2)T n T n n lgn =+,给出该方程解的一个上界
不适用
使用递归树方法可以求得其一个上界为22
(lg )O n n
4.3.5给出某常数1,1a b ≥>和函数()f n ,使得其满足主定理case3中除了(/)()af n b cf n ≤外的所有条件。
()(sin 2)f n n n =+,1,2log =0b a b a == ,
log sin 21,(),()()=()1b a n f n n f n n n ξξξ++>>∴=ΩΩ<,0<
(/)(/2)(sin(/2)2)/2af n b f n n n ==+
(/)()
(sin(/2)2)/2(sin 2)sin(/2)22(sin 2)
af n b cf n n n cn n n c n ≤+≤++∴≥+若则
找不到这样的1c <,总是满足上面的条件,如sin 1n =-
时,sin(/2)2n ±为,此时sin(/2)212(sin 2)n n +>+,所以(/)()af n b cf n ≤不满足。