算法导论笔记

算法和数据结构

算法

函数的增长

渐近记号

用来描述算法渐近运行时间的记号,根据定义域为自然数集 N={ 0,1,2,} 的函数来定义。这样的记号对描述最坏情况运行时间函数 T(n) 是方便的,因为该函数通常只定义在整数输入规模上。

Θ 记号

对一个给定的函数 g(n) ,用 Θ(g(n)) 来表示一下函数的集合:

Θ(g(n))={ f(n):c1c2c0使nn00c1g(n)f(n)c2g(n)}

若存在正常量 c1 c2 使得对足够大的 n ,函数 f(n) 能“夹入” c1g(n) c2g(n) 之间,则 f(n) 属于集合 Θ(g(n)) ,因为 Θ(g(n)) 是一个集合,所以可以记“ f(n)Θ(g(n)) ”,以指出 f(n) Θ(g(n)) 的成员。作为替代,我们通常记“ f(n)=Theta(g(n)) ”以表达相同的概念。

我们称 g(n) f(n) 的一个渐进紧确界(asymptotically tight bound)。

一般来说,对任意多项式 p(n)=ni=1aini ,其中 ai 为常量且 ad>0 ,我们有 p(n)=Θ(nd)

因为任意常量是一个0阶多项式,所以可以把任意常量函数表示成 Θ(n0) 或者 Θ(1)

O 记号

Θ 记号渐近地给出一个函数的上界和下界。当只有一个渐进上界时,使用 O 记号。对于给定的函数 g(n) ,用 O(g(n)) 来表示以下函数的集合:

O(g(n))={ f(n)cn0使nn00f(n)cg(n)}

Ω 记号

正如 O 记号提供了一个函数的渐近上界 Ω 记号提供了渐近下界。对于给定的函数 g(n) ,用 Ω(g(n)) 来表示以下函数的集合:

Ω(g(n))={ f(n)cn0使nn00cg(n)f(n)}

渐近记号

定理3.1:对任意两个函数 f(n) g(n) ,我们有 f(n)=Θg(n) ,当且仅当: f(n)=Og(n) f(n)=Ωg(n)

o 记号

O 记号提供的渐近上界可能是也可能不是渐近紧确的。界 2n2=Og(n2) 是渐近紧确的,但是界 2n=Og(n2) 却不是。我们使用 o 记号来表示一个非渐进紧确的上界。

形式地定义 o(g(n)) 为以下集合:

o(g(n))={ f(n):c>0,n0>0,使n>n0,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

ω 记号

ω 记号与 Ω 记号的关系类似于 o O 的关系。我们使用 ω 来定义一个非渐近紧确的下界。定义它的一种方式是:

f(n)ωg(n)  g(n)o(f(n))

然而我们形式化地定义 f(n)=ω(g(n)) 为以下集合:
ω(g(n))={ f(n):c>0,n0>0,使nn00cg(n)<f
  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值