函数渐进性的O, Ω ,Θ的表示

一、定义

对于任何函数 f(n) 都可以用 O,Ω,Φ 来表示当 n 时的阶的情况,可以把 O,Ω,Φ 分别看成是 = ,分别估计了函数的渐进上界,渐进下届和准确界。定义表示如下:

1.第一种定义:

设函数 f(n) 代表某一算法在输入大小为 n 的情况下的工作量(效率),假设f(n) g(n) 非负单调,且极限这里写图片描述存在,则当 n 趋于无穷的时候,我们将f(n)与另一行为已知的函数 g(n) 进行比较:
1)如果这里写图片描述,则称 f(n) 在数量级上严格小于 g(n) ,记为 f(n)=o(g(n))
2)如果这里写图片描述,则称 f(n) 在数量级上严格大于 g(n) ,记为 f(n)=ω(g(n))
3)如果这里写图片描述,这里c为非零常数,则称 f(n) 在数量级上等于 g(n) ,记为 f(n)=Θ(g(n))
4)如果 f(n) 在数量级上小于或等于 g(n) ,则记为 f(n)=O(g(n))
5)如果 f(n) 在数量级上大于或等于 g(n) ,则记为 f(n)=Ω(g(n))

2.O表示法第二种定义

对于非负函数 T(n) ,存在两个正常数 cn0 ,并且对于所有的 n>n0 ,有 T(n)cf(n) ,则称 T(n) 在集合 O(f(n)) 里(即前一个集合可以被后一个集合覆盖),记为 T(n)=O(f(n)) ,直观意义是,对于足够大的数据集合,本算法执行的步骤数总是少于 cf(n) 。我们在进行算法分析时希望获得的是尽可能紧凑的上界。

上述算法计算时间的渐进表示是由D.Knuth提出的,但是在数学家眼中 f(n)=O(g(n)) 这种等于号是不严格,但这没关系,不影响计算机算法的分析。

二、 O,Ω,Θ 的性质

利用这些性质可以大大简化对算法的分析。

1)性质1 O,Ω,Θ 是自反的、传递的。例如:
· 自反性, f(n)=O(f(n))
·传递性,若 f(n)=O(g(n))g(n)=O(h(n)) ,则 f(n)=O(h(n))
2)性质2 Θ还有对称性: f(n)=Θ(g(n))g(n)=Θ(f(n))
3)性质3 对于任意的 f(n),g(n) ,我们有 f(n)+g(n)=Θ(max{f(n),g(n)}) ,即对于一个由若干部分组成的串行程序,其总的渐进复杂度等于其复杂度最高的部分,这是个十分有用的性质。
4)性质4 如果 f(n)=O(kg(n)) ,这里k是一个常数,则 f(n)=O(g(n)) ,这条规则告诉我们系数是无关紧要的。因为我们关心的是数量级的比较,而不是同一数量级里面的细小差异。当然当关注点不同时,系数可能会变得重要。
5)性质5 如果 f1(n)=O(g1(n) ,并且 f2(n)=O(g2(n) ,则 (f1+f2)(n)=O(max{g1(n),g2(n)}) .
6)性质6 如果 f1(n) O(g1(n) 里,并且 f2(n) O(g2(n) 里,则 f1(n)f2(n) O(g1(n)O(g2(n) 里。

参考书:《算法之道》邹横明著。

  • 5
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 设$f(n)$和$g(n)$是两个非负函数。我们称$f(n)$为$g(n)$的$O$符号,当且仅当存在正常数$c$和$n_0$,使得对于所有$n≥n_0$,都有$f(n)≤cg(n)$。我们用$f(n)=O(g(n))$表示。 同样,我们称$f(n)$为$g(n)$的$\Omega$符号,当且仅当存在正常数$c$和$n_0$,使得对于所有$n≥n_0$,都有$f(n)≥cg(n)$。我们用$f(n)=\Omega(g(n))$表示。 证明: 如果$f(n)=O(g(n))$,则存在正常数$c_1$和$n_1$,使得对于所有$n≥n_1$,都有$f(n)≤c_1g(n)$。 同样,如果$f(n)=\Omega(g(n))$,则存在正常数$c_2$和$n_2$,使得对于所有$n≥n_2$,都有$f(n)≥c_2g(n)$。 因此,对于任意$n≥\max(n_1,n_2)$,我们有: $c_1g(n)≥f(n)≥c_2g(n)$ 这意味着$f(n)$和$g(n)$的增长速度是相似的,因此我们可以将它们视为同一级别的复杂度。 因此,当$f(n)=O(g(n))$且$f(n)=\Omega(g(n))$时,我们有$f(n)=Θ(g(n))$。 证毕。 ### 回答2: 复杂度函数的O和Ω关系式用于描述算法的时间复杂度下界和上界之间的关系。假设函数f(n)和g(n)都是非负函数,我们有O(g(n))表示函数f(n)的上界,即存在正常数c和n0使得对于所有的n > n0,有f(n) <= c * g(n)。Ω(g(n))表示函数f(n)的下界,即存在正常数c和n0使得对于所有的n > n0,有f(n) >= c * g(n)。 为了证明复杂度函数的O和Ω关系式,我们可以用一个简单的例子来说明。假设我们有一个函数f(n) = n^2 + n和g(n) = n^2,我们需要证明f(n) = O(g(n))和f(n) = Ω(g(n))。 首先,我们需要找到正常数c和n0,使得对于所有的n > n0,有f(n) <= c * g(n)。我们可以选择c = 2和n0 = 1,计算当n > 1时,f(n) = n^2 + n <= 2n^2 = 2 * g(n)。因此,我们可以得出结论f(n) = O(g(n))。 接下来,我们需要找到正常数c和n0,使得对于所有的n > n0,有f(n) >= c * g(n)。我们可以选择c = 1和n0 = 1,计算当n > 1时,f(n) = n^2 + n >= n^2 = 1 * g(n)。因此,我们可以得出结论f(n) = Ω(g(n))。 综上所述,我们证明了复杂度函数的O和Ω关系式。根据具体的函数和算法情况,我们可以选择合适的正常数和n0来证明函数的上界和下界关系。 ### 回答3: 复杂度函数的O和Ω关系是用来描述算法的上界和下界,用于表示算法的时间复杂度。对于一个给定的算法,如果存在常数c和正数n0,使得当输入规模大于n0时,算法的运行时间始终小于等于c * f(n),则称算法的时间复杂度为O(f(n))。如果存在常数c'和正数n0',使得当输入规模大于n0'时,算法的运行时间始终大于等于c' * f(n),则称算法的时间复杂度为Ω(f(n))。 为了证明O和Ω关系式,我们需要给出证据来说明上述定义成立。假设有函数g(n)表示算法的时间复杂度,并且存在常数c、c'、n0和n0',满足: 1. 当输入规模大于n0时,g(n) <= c * f(n)。 2. 当输入规模大于n0'时,g(n) >= c' * f(n)。 首先证明O关系式。假设令c = 1。当输入规模大于n0时,有g(n) <= f(n)。即算法的时间复杂度g(n)不大于f(n),满足O(f(n))。 接下来证明Ω关系式。假设令c' = 1。当输入规模大于n0'时,有g(n) >= f(n)。即算法的时间复杂度g(n)不小于f(n),满足Ω(f(n))。 综上所述,对于一个给定的算法,如果存在常数c和正数n0,使得当输入规模大于n0时,算法的运行时间始终小于等于c * f(n),则该算法的时间复杂度为O(f(n));如果存在常数c'和正数n0',使得当输入规模大于n0'时,算法的运行时间始终大于等于c' * f(n),则该算法的时间复杂度为Ω(f(n))。因此,复杂度函数的O和Ω关系式证明完毕。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值