算法导论第三章思考题参考答案(5)

Problem 3-1
a.如果取任意一个c > 0,则c* n^ k−p(n)的终态趋于无穷,特别地,存在一个n0使得对于每一个n≥n0,它都是正的,因此,我们可以在两边同时加上p(n)得到p(n) < c* n^ k。
b.如果取任意一个c > 0,则p(n)−c* n^ k的终态趋于无穷,特别地,存在一个n0使得对于每一个n≥n0,它都是正的,因此,我们可以在两边同时加上c* n ^ k得到p(n) > c* n^ k。
c.由前面的部分我们得到p(n) = O(n^k)和p(n) = Ω(n^k)。因此,通过定理3.1,我们得到p(n) = Θ(n^k)。
d.

e.

 Problem 3-2

Problem 3-3

这些项的增长率是逐行递减的。同一行的函数彼此为Θ。

b.如果我们定义函数

注意f(n)满足渐近正的要求这一章对所分析的函数提出了渐近正的要求。

对于偶数n,我们有

对于奇数n,我们有

通过观察偶数n,我们得到f(n)不是O(gi(n))对于任意n;通过观察奇数n,我们得到f(n)不是Ω(gi(n))对于任意n。 

Problem 3-4

a.错误。反例:n = O(n^2)但 n^2 != O(n)。
b.错误。反例:n + n^2 != Θ(n)。
c.正确。由于f(n) = O(g(n)),存在c和n,使得n≥n0意味着f(n)≤c*g(n)且f(n)≥1。这意味着log(f(n))≤log(cg(n)) = log(c) + log(g(n))。注意,取对数后不等式保留,因为f(n)≥1。现在我们需要找到d使得log(f(n))≤d*log(g(n))使log(c) + log(g(n))≤d*log(g(n))就足够了,这可以通过令d = log(c) + 1来实现,因为log(g(n))≥1。
d.错误。反例:2*n = O(n)但2^ 2n != 2 ^n,如练习3.1-4所示

e.错误。反例:设f(n) = 1/n 。假设对于n≥n0,c满足于1/n ≤c / (n^2)。选取k使k*c≥n0且k > 1。这就意味着1 / ( k*c )<= c/(k^2*c^2) = 1 / (k^2*c)这是一个矛盾。 

f.正确。由于f(n) = O(g(n)),存在c和n0,使得n≥n0意味着f(n)≤c*g(n)。故g(n)≥f(n)/c ,故g(n) = Ω(f(n))。

g.错误。反例:设f(n) = 2^ 2n。通过习题3.1-4,2^ 2n != O(2^n)。

h.正确。设g为任意满足g(n) = o(f(n))的函数。由于g是渐进式正的,令n≥n0意味着g(n)≥0。那么f (n) + g (n)≥f (n)所以f (n) + o(f(n)) =Ω(f (n))。然后选择n1,使n≥n1意味着g(n)≤f(n)。那么f (n) + g (n)≤f (n) + f (n) = 2 f (n)。因此,f (n) + o(f (n)) = O(f (n))。由定理3.1,这意味着f (n) + o (f (n)) =Θ(f (n))。

Problem 3-5

a.假设f(n) 不等于O(g(n))这意味着∀c > 0,n0,∃n≥n0, f(n) > cg(n)。因为这个对每个c都成立,我们可以让它是任意的,比如1。最初,我们设置n0 = 1,然后,我们将结果n称为a1。然后,一般设n0 = ai+1,且ai+1为n的结果值。然后,在无限集{a1, a2,…}上,我们有f(n) > g(n),因此,f =∞Ω(g(n)) 

对于Ω的通常定义,情况并非如此。假设f(n) = n^2 (n mod 2) 和 g(n) = n,在所有偶数值上,g(n)更大,但在所有奇数值上,f(n)增长更快。

b.优点是你得到了a部分的结果,这是一个很好的性质。一个缺点是,你对行为做出声明的无限点集可能非常稀疏。同样,也没有提到在这个无限集合之外的行为,它可以做任何它想做的事。

c.函数f只能在Θ(g(n))中,如果f(n)有一个非负的无限尾。在这种情况下O(g(n))的定义与O'(g(n))一致。类似,对于一个在Ω(g(n))中的函数,我们需要f(n)对于某个无限尾是非负的,其中O(g(n))等于O'(g(n))所以,我们有两个方向,把O变成O'不会改变什么。

d.假设f(n)∈~ Θ(g(n)),则∃c1, c2, k1, k2, n0,∀n≥n0,0≤c1*g(n)/((lg(n))^k1) ≤ f(n) ≤ c2*g(n)*((lg(n))^k2),如果我们单独看这些不等式,我们有

c1*g(n)/((lg(n))^k1)≤f(n) (f(n)∈~ Ω(g(n))

f(n)≤c2*g(n)*((lg(n))^k2) (f(n)∈~ O(g(n)))
现在来看另一个方向。假设我们有∃n1, c1, k1,∀n≥n1,c1*g(n)/(lg(n))^k1≤f(n)和∃n2, c2, k2,∀n≥n2, f(n)≤c2*g(n)*((lg(n))^k2)。把这些组合起来,并让n0 = max(n1, n2),我们有∀n≥n0,c1*g(n)/((lg(n))^k1) ≤ f(n) ≤ c2*g(n)*((lg(n))^k2)

 Problem 3-6

译自Michelle Bodnar与Andrew Lohr 

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
算法导论 中文 第三版 由于文档太大,分为三个部分 本文档只用作学习交流 在有关算法的书中,有一些叙述非常严谨,但不够全面;另一些涉及了大量的题材,但又缺乏严谨性。本书将严谨性和全面性融为一体,深入讨论各类算法,并着力使这些算法的设计和分析能为各个层次的读者接受。全书各章自成体系,可以作为独立的学习单元;算法以英语和伪代码的形式描述,具备初步程序设计经验的人就能看懂;说明和解释力求浅显易懂,不失深度和数学严谨性。 《算法导论(原书第3版)》选材经典、内容丰富、结构合理、逻辑清晰,对本科生的数据结构课程和研究生的算法课程都是非常实用的教材,在it专业人员的职业生涯中,本书也是一本案头必备的参考书或工程实践手册。    第3版的主要变化:    新增了van emde boas树和多线程算法,并且将矩阵基础移至附录。    修订了递归式(现在称为“分治策略”)那一章的内容,更广泛地覆盖分治法。    移除两章很少讲授的内容:二项堆和排序网络。    修订了动态规划和贪心算法相关内容。    流网络相关材料现在基于边上的全部流。    由于关于矩阵基础和strassen算法的材料移到了其他章,矩阵运算这一章的内容所占篇幅更小。    修改了对knuth-morris-pratt字符串匹配算法的讨论。    新增100道练习和28道思考题,还更新并补充了参考文献。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值