《算法导论(原书第3版)》一思考题

简介: 本节书摘来自华章出版社《算法导论(原书第3版)》一 书中的第3章,第3.3节,作者:(美)Thomas H.Cormen,Charles E.Leiserson,Ronald L.Rivest,Clifford Stein,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

思考题

3-1 (多项式的渐近行为) 假设p(n)=∑di=0aini是一个关于n的d次多项式,其中ad>0,k是一个常量。使用渐近记号的定义来证明下面的性质。

a.若k≥d,则p(n)=O(nk)。

b.若k≤d,则p(n)=Ω(nk)。

c.若k=d,则p(n)=Θ(nk)。

d.若k>d,则p(n)=o(nk)。

e.若k

3-2 (相对渐近增长) 为下表中的每对表达式(A,B)指出A是否是B的O、o、Ω、ω或Θ。假设k≥1、ε>0且c>1均为常量。回答应该以表格的形式,将“是”或“否”写在每个空格中。

screenshot

3-3 (根据渐近增长率排序)

a.根据增长的阶来排序下面的函数,即求出满足g1=Ω(g2),g2=Ω(g3),…,g29=Ω(g30)的函数的一种排列g1,g2,…,g30。把你的表划分成等价类,使得函数f(n)和g(n)在相同类中当且仅当f(n)=Θ(g(n))。
61

lg(lgn)2lgn(2)lgnn2n!(lgn)!

32nn3lg2nlg(n!)22nn1/lgn

lnlnnlg*nn·2nnlglgnlnn1

2lgn(lgn)lgnen4lgn(n+1)!lgn

lg*(lgn)22lgnn2nnlgn22n+1

b.给出非负函数f(n)的一个例子,使得对所有在(a)部分中的函数gi(n),f(n)既不是O(gi(n))也不是Ω(gi(n))。

3-4 (渐近记号的性质) 假设f(n)和g(n)为渐近正函数。证明或反驳下面的每个猜测。

a.f(n)=O(g(n))蕴涵g(n)=O(f(n))。

b.f(n)+g(n)=Θ(min(f(n),g(n)))。

c.f(n)=O(g(n))蕴涵lg(f(n))=O(lg(g(n))),其中对所有足够大的n,有lg(g(n))≥1且f(n)≥1。

d.f(n)=O(g(n))蕴涵2f(n)=O(2g(n))。

e.f(n)=O((f(n))2)。

f.f(n)=O(g(n))蕴涵g(n)=Ω(f(n))。

g.f(n)=Θ(f(n/2))。

h.f(n)+o(f(n))=Θ(f(n))。

3-5 (O与Ω的一些变形) 某些作者用一种与我们稍微不同的方式来定义Ω;假设我们使用Ω∞(读作“Ω无穷”)来表示这种可选的定义。若存在正常量c,使得对无穷多个整数n,有f(n)≥cg(n)≥0,则称f(n)=Ω∞(g(n))。

a.证明:对渐近非负的任意两个函数f(n)和g(n),或者f(n)=O(g(n))或者f(n)=Ω∞(g(n))或者二者均成立,然而,如果使用Ω来代替Ω∞,那么该命题并不为真。
62

b.描述用Ω∞代替Ω来刻画程序运行时间的潜在优点与缺点。

某些作者也用一种稍微不同的方式来定义O;假设使用O′来表示这种可选的定义。我们称f(n)=O′(g(n))当且仅当f(n)=O(g(n))。

c.如果使用O′代替O但仍然使用Ω,定理3.1中的“当且仅当”的每个方向将出现什么情况?

有些作者定义O(读作“软O”)来意指忽略对数因子的O:
O(g(n))={f(n):存在正常量c,k和n0,使得对所有n≥n0,有0≤f(n)≤cg(n)lgk(n)}

d.用一种类似的方式定义Ω和Θ。证明与定理3.1相对应的类似结论。

3-6 (多重函数) 我们可以把用于函数lg中的重复操作符应用于实数集上的任意单调递增函数f(n)。对给定的常量c∈R,我们定义多重函数f*c为
f*c(n)=min{i≥0:f(i)(n)≤c}

该函数不必在所有情况下都为良定义的。换句话说,值f*c(n)是为缩小其参数到c或更小所需要函数f重复应用的数目。

对如下每个函数f(n)和常量c,给出f*c(n)的一个尽量紧确的界。

screenshot

相关文章
|
算法
【AcWing算法基础课】第五章 动态规划(未完待续)(3)
当然,一个人能够滑动到某相邻区域的前提是该区域的高度低于自己目前所在区域的高度。
123 0
|
7月前
|
算法 开发者 Python
惊呆了!Python算法设计与分析,分治法、贪心、动态规划...这些你都会了吗?不会?那还不快来学!
【7月更文挑战第10天】探索编程巅峰,算法至关重要。Python以其易读性成为学习算法的首选。分治法,如归并排序,将大问题拆解;贪心算法,如找零问题,每步求局部最优;动态规划,如斐波那契数列,利用子问题解。通过示例代码,理解并掌握这些算法,提升编程技能,面对挑战更加从容。动手实践,体验算法的神奇力量吧!
85 8
|
9月前
鸽巢原理:揭秘计数排序的奇妙思想
鸽巢原理:揭秘计数排序的奇妙思想
90 1
|
9月前
|
机器学习/深度学习 算法 Java
「程序员必须掌握的算法」动态规划「中篇」
「程序员必须掌握的算法」动态规划「中篇」
|
算法 测试技术
动态规划真的有那么抽象吗?(递推算法还是动态规划别傻傻分不清了) 以正确的姿势学习动态规划 (入门篇)
动态规划真的有那么抽象吗?(递推算法还是动态规划别傻傻分不清了) 以正确的姿势学习动态规划 (入门篇)
动态规划真的有那么抽象吗?(递推算法还是动态规划别傻傻分不清了) 以正确的姿势学习动态规划 (入门篇)
|
算法
这样给面试官解释约瑟夫环问题的几种巧妙解法,面试官满意的笑了
约瑟夫环问题是算法中相当经典的一个问题,其问题理解是相当容易的,并且问题描述有非常多的版本,并且约瑟夫环问题还有很多变形,这篇约瑟夫问题的讲解,一定可以带你理解通通!
165 0
这样给面试官解释约瑟夫环问题的几种巧妙解法,面试官满意的笑了
|
机器学习/深度学习 算法
普通人如何理解递归算法
当人们提到“递归”一词,不知道如何理解它,也有人会问递归和迭代有什么区别?首先可以从定义上入手来分析,递归是自身调用自身的函数进行循环、遇到满足终止条件的情况时逐层返回来结束。迭代则是函数内某段代码实现循环,循环代码中参与运算的变量同时是保存结果的变量,当前保存的结果作为下一次循环计算的初始值。
305 0
普通人如何理解递归算法
|
存储 算法
常考算法思想套路
常考算法思想套路
110 0