复杂度 O、Θ、Ω、o、ω

这篇博客详细解释了复杂度分析中常用的符号O、Θ、o、Ω、ω的含义。O表示算法的上界,Θ定义精确的渐近行为,o是不精确的上界,Ω定义下界,ω是不精确的下界。文章通过数学解释和通俗理解帮助读者掌握这些概念,并提供了相应的英文词汇以便查阅资料。
摘要由CSDN通过智能技术生成

前言

在我们表示复杂度的时候,通常使用大O来表示。

但是,在其他书籍中,你可能还见过Θ、Ω、o、ω等符号。

那么,这些符号又是什么意思呢?

本节,我们就来解决这个问题。

读音

我们先来纠正一波读音:

  • O,/əʊ/,大Oh

  • o,/əʊ/,小oh

  • Θ,/ˈθiːtə/,theta

  • Ω,/oʊˈmeɡə/,大Omega

  • ω,/oʊˈmeɡə/,小omega

是不是跟老师教得不太一样^^

数学解释

Θ

Θ定义了一种精确的渐近行为(exact asymptotic behavior),怎么说呢?

用函数来表示:

对于f(n),存在正数n0、c1、c2,使得当 n>=n0 时,始终存在 0 <= c1*g(n) <= f(n) <= c2*g(n),则我们可以用 f(n)=Θ(g(n))表示。

用图来表示:

Θ同时定义了上界和下界,f(n)位于上界和下界之间,且包含等号。

比如说ÿ

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值