算法设计与分析习题解答
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第一章作业
1.证明下列Ο、Ω和Θ的性质
1)f=Ο(g)当且仅当g=Ω(f)
证明:充分性。若f=Ο(g),则必然存在常数c1>0和n0,使得∀n≥n0,有f≤c1*g(n)。由于c1≠0,故g(n) ≥ 1/ c1 *f(n),故g=Ω(f)。
必要性。同理,若g=Ω(f),则必然存在c2>0和n0,使得∀n≥n0,有g(n) ≥ c2 *f(n).由于c2≠0,故f(n) ≤ 1/ c2*f(n),故f=Ο(g)。
2)若f=Θ(g)则g=Θ(f)
证明:若f=Θ(g),则必然存在常数c1>0,c2>0和n0,使得∀n≥n0,有c1*g(n) ≤f(n) ≤ c2*g(n)。由于c1≠0,c2≠0,f(n) ≥c1*g(n)可得g(n) ≤ 1/c1*f(n),同时,f(n) ≤c2*g(n),有g(n) ≥ 1/c2*f(n),即1/c2*f(n) ≤g(n) ≤ 1/c1*f(n),故g=Θ(f)。
3)Ο(f+g)= Ο(max(f,g)),对于Ω和Θ同样成立。
证明:设F(n)= Ο(f+g),则存在c1>0,和n1,使得∀n≥n1,有
F(n) ≤ c1 (f(n)+g(n))
= c1 f(n) + c1g(n)
≤ c1*max{f,g}+ c1*max{f,g}
=2 c1*max{f,g}
所以,F(n)=Ο(max(f,g)),即Ο(f+g)= Ο(max(f,g))
对于Ω和Θ同理证明可以成立。
4)log(n!)= Θ(nlogn)
证明:
∙由于log(n!)=∑=n i i 1log ≤∑=n
i n 1log =nlogn ,所以可得log(n!)= Ο(nlogn)。
∙由于对所有的偶数n 有,
log(n!)= ∑=n i i 1log ≥∑=n n i i 2/log ≥∑=n
n i n 2/2/log ≥(n/2)log(n/2)=(nlogn)/2-n/2。
当n ≥4,(nlogn)/2-n/2≥(nlogn)/4,故可得∀n ≥4,log(n!) ≥(nlogn)/4,即log(n!)= Ω(nlogn)。
综合以上两点可得log(n!)= Θ(nlogn)
2. 设计一个算法,求给定n 个元素的第二大元素,并给出算法在最坏情况下使用的比较次数。(复杂度至多为2n-3)
算法:
V oid findsecond(ElemType A[])
{
for (i=2; i<=n;i++)
if (A[1] { temp=A[1]; A[1]=A[i]; A[i]=temp; } for (i=3; i<=n;i++)