算法导论详解(2) 第三章函数的增长

本文探讨了算法分析中的核心概念——渐近记号,包括Θ、O、Ω、o及ω记号的定义与应用,并介绍了常用函数及其性质。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文是《算法导论》第三章:函数的增长的学习笔记。
没有涉及到具体的算法。
主要内容有:
- 五种渐近记号的表示
- 常用的函数与标记

3.1 渐近记号

ΘOΩ三种记号的图示:

这里写图片描述

先看第一幅图(a)——Θ记号

若存在正常量c1,c2,n0,使得对所有nn0,有0c1g(n)f(n)c2g(n),则f(n)属于集合Θ(g(n))
可以记为f(n)Θ(g(n)),我们通常用f(n)=Θ(g(n))表达相同的概念。

上述公式的含义:函数f(n)能“夹入”c1g(n)c2g(n)之间。换句话说,对所有的nn0,函数f(n)在一个常量因子内等于g(n),我们称g(n)f(n)的一个渐近紧确界(asymptotically tight bound)。

实例:可以用上述的形式化定义来证明:12n23n=Θ(n2),以及6n3Θ(n2)

渐近正函数就是对足够大的n均为正的函数。

直觉上,一个渐近正函数的低阶项 在确定渐近确界时可以被忽略,因为对于大的n,它们是无足轻重的。

一般来说,对任意多项式p(n)=di=0aini,其中ai为常量且ad>0(最高阶的系数大于零),则有p(n)=Θ(nd)

接着看图(b)——O记号

Θ记号渐近地给出了一个函数的上界和下届。当只有一个渐近上界时,使用O记号。

O(g(n))={f(n)存在正常量c,n0,使得对所有nn0,有0f(n)cg(n)}

我们记f(n)=O(g(n))表示f(n)是集合O(g(n))的成员。注意f(n)=Θ(g(n))蕴含了f(n)=O(g(n)),因为Θ记号是一个比O记号更强的概念。

使用O记号,我们常常可以仅仅通过检查算法的总体结构来描述算法的运行时间。O记号描述上界,对插入排序算法的最坏情况运行时间的界O(n2)也适合于该算法对每个输入的运行时间。该算法对每个输入的运行时间都有一个界,这就是综合性描述。

最后看图(c)——Ω记号

正如O记号提供了渐近上界,Ω记号提供了渐进下界。

Ω(g(n))={f(n)存在正常量c,n0,使得对所有nn0,有0cg(n)f(n)}

于是,由此引出了定理3.1。

定理 3.1

对任意两个函数f(n)g(n),我们有f(n)=Θ(g(n)),当且仅当f(n)=O(g(n))f(n)=Ω(g(n))

当一个算法的运行时间为Ω(g(n))时,我们意指不管n是什么规模,只要n足够大,对那个输入的运行时间至少是g(n)的常数倍。

等式和不等式中的渐近记号

当渐近记号出现在某个公式中时,我们将其解释为代表某个我们不关注名称的匿名函数。

例如:2n2+3n+1=2n2+Θ(n)

按这种方式使用渐记号可以帮助消除一个等式中无关紧要的细节与混乱。

例如:归并排序的最坏情况运行时间:

T(n)=2T(n/2)+Θ(n)

如果只对T(n)的渐近行为感兴趣,就没必要准确说明所以低阶项,它们都被理解为包含在由项Θ(n)表示的匿名函数中。

在某些例子中,渐近记号出现在等式的左边,如:

2n2+Θ(n)=Θ(n2)

无论怎么选择等号左边的匿名函数,总有一种办法来选择等号右边的匿名函数使等式成立。

o记号

o记号,非渐近紧确的上界。

o(g(n))={f(n)对任意正常量c>0,存在正常量n0>0,使得对所有nn0,有0f(n)<cg(n)}

O记号与o记号类似,主要的区别 是在f(n)=O(g(n))中,界0f(n)cg(n)对某个常量c>0成立,但在f(n)=o(g(n))中,界0f(n)<cg(n)对所有常量c>0成立。

直观上,在o记号中,当n趋向于无穷时,函数f(n)相对于g(n)来说变得微不足道了,即:

limnf(n)g(n)=0

ω记号

非渐近紧确下界。

ω(g(n))={f(n)对任意正常量c>0,存在正常量n0>0,使得对所有nn0,有0cg(n)<f(n)}

limnf(n)g(n)=

渐近运算的运算性质

传递性、自反性、对称性与转置对称性:

这里写图片描述

这里写图片描述

而且:两个函数f和g的渐近比较关系可与实数a与b之间的比较做类比:

  • f(n)=O(g(n)) 类似于a<= b
  • f(n)=Ω(g(n)) 类似于a>= b
  • f(n)=Θ(g(n)) 类似于a= b
  • f(n)=o(g(n)) 类似于a< b
  • f(n)=w(g(n)) 类似于a> b

三分性:虽然实数具有三分性,即对于任意两个实数a、b,下列三种情况必须有一种成立:a<ba=ba>b。但是不是所有函数都可以渐近比较。

3.2 标准记号与常用函数

单调性

单调递增/单调递减:包含等号;严格递增/严格递减:不包含等号。

向下取整与向上取整

x的向下取整:x;x的向上取整:x

模运算

对任意整数a和正整数n,a mod n 的值就是商a/n的余数。

a mod n=ana/n

(a mod n)=(b mod n),则记ab(modn)

多项式

给定一个非负整数d,n的d次多项式p(n)

p(n)=i=0daini

其中,ad0

多项式为渐近正的当且仅当ad>0。对于一个d次渐近正的多项式p(n),有p(n)=Θ(nd)

若对于某个常量k,有f(n)=O(nk),则称函数f(n)是多项式有界的。

指数

对所有使得a>1的实常量a和b,有

limnnban=0

据此可得:
nb=o(an)

对数

以2为底的自然数:

lgn=log2n

自然对数:
lnn=logen

取幂:
lgkn=(lgn)k

复合:
lglgn=lg(lgn)

一个重要的记号约定:对数函数只适用于公式中的下一项,所以lgn+k意思是指(lgn)+k

对于a>0,b>0,c>0和n,有

a=blogba

logc(ab)=logca+logcb

logb(an)=nlogba

logba=logcalogcb

logb(1/a)=logba

logba=1logab

alogbc=clogba

其中,上述等式的对数底不为1。

对任意常量a,有

logbn=o(na)

表示任意正的多项式函数都比任意多对数函数增长得快。

阶乘

n!,读作“n的阶乘”。其定义为对整数n0

n!={1n(n1)!n=0n>0

阶乘函数的一个弱上界是n!nn,因为在阶乘中,n项的每项最多为n。

斯特林(Stirling)近似公式

n!=2πn(ne)n(1+Θ(1n))

由上述公式可以证明:

n!=o(nn)

n!=ω(2n)

lgn!=Θ(nlgn)

多重函数

记号f(i)(n)表示f(n)重复i次作用于一个初值n上。对非负整数i,我们递归地定义:

f(i)(n)={nf(f(i1)(n))i=0i>0

多重对数函数

lgn表示多重对数,多重对数增长非常慢。

斐波那契数

斐波那契数的递归定义:

F0=0

F1=1

Fi=Fi1+Fi2,i2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值