算法复杂度分析(渐近记号)

本文详细介绍了算法复杂度分析中的渐进记号,包括Θ、O、Ω、o和ω记号的定义、性质及其应用场景。通过实例证明了如何使用这些记号来描述和比较算法的时间复杂度,强调了它们在算法分析中的重要性。

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

【见解】关于算法复杂度的理解不能只停留在根据代码直接凭感官或者经验直接推测其公式(例如:根据for循环直接推测出一个O(n)复杂度,关于复杂度的理解更应该深入到其所代表的函数空间中去。

1.渐进记号

在这里插入图片描述
渐进记号:用来描述算法渐进运行时间的记号,其定义域为自然数集合N={ 0,1,2,3...}N=\{0,1,2,3...\}N={ 0,1,2,3...}
【渐进记号可刻画算法的运行时间, 也可以刻画算法的某个其他方面(例如,算法的空间数量),甚至可以是和算法没有任何关系的函数。】

1.1 Θ\ThetaΘ记号

【定义】
Θ(g(n))\Theta(g(n))Θ(g(n))来表示以下函数的集合Θ(g(n))={ f(n):存在正常量c1,c2和n0,使得对所有n≥n0,有0≤c1∗g(n)≤f(n)≤c2∗g(n)}\Theta(g(n)) = \{f(n):存在正常量c_1, c_2 和n_0,使得对所有 n\ge n_0, 有 0 \leq c_1*g(n) \leq f(n) \leq c_2*g(n)\}Θ(g(n))={ f(n):c1,c2n0使nn0,0c1g(n)f(n)c2g(n)}
该记号渐近得给出一个函数的上界和下界。

【谨记】
Θ(g(n))\Theta(g(n))Θ(g(n))表示的是一个集合,可以记f(n)∈Θ(g(n))f(n)\in\Theta(g(n))f(n)Θ(g(n)) 用来指出f(n)是Θ(g(n))的成员f(n)是\Theta(g(n))的成员f(n)Θ(g(n))Θ(g(n))\Theta(g(n))Θ(g(n))的定义要求每个成员f(n)∈Θ(g(n))f(n)\in \Theta(g(n))f(n)Θ(g(n))均为渐近非负,即当nnn足够大时, f(n)f(n)f(n)非负。【渐近非负性对于其他渐近符号也成立】
因为任意常量是一个0阶多项式, 随意可以把任意常量函数表示成Θ(n0)或Θ(1)\Theta(n^0)或\Theta(1)Θ(n0)Θ(1)

[练习1.1]
1.1 假设f(n)与g(n)都是渐进非负函数, 使用Θ\ThetaΘ 记号的基本定义来证明 max⁡(f(n),g(n))=Θ(f(n)+g(n))\max(f(n), g(n))= \Theta(f(n) +g(n)) max(f(n),g(n))=Θ(f(n)+g(n))
解: 根据定义,要使上述条件成立,只需存在正常数c1,c2,n0c_1, c_2, n_0c1,c2,n0, 使得对于所有的n≥n0n\ge n_0nn0c1∗(f(n)+g(n))≤max⁡(f(n),g(n))≤c2∗(f(n)+g(n))成立c_1*(f(n) + g(n)) \leq\max(f(n), g(n)) \leq c_2* (f(n) + g(n)) 成立c1(f(n)+g(n))max(f(n),g(n))c2(f(n)+g(n))
对于右边的不等号明显可知f(n)+g(n)f(n)+g(n)f(n)+g(n)恒大于其中之一,可取c1=1c_1=1c1=1
对于左边的不等号,由于f(n)和g(n)f(n)和g(n)f(n)g(n)具有交换性(因其无明确定义),假设f(n)≤g(n)f(n)\leq g(n)f(n)g(n),则在c1=12c_1 = \frac{1}{2}c1=21时成立
则 对于c1=1,c2=12,n0∈Nc_1 = 1, c_2 = \frac{1}{2}, n_0 \in Nc

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值