首页 文章

大Ө符号究竟代表什么?

提问于
浏览
150

我真的很困惑大O,大欧米茄和大Theta符号之间的差异 .

我知道大O是上界,大欧米茄是下界,但大Ө(theta)究竟代表什么?

我读过它意味着 tight bound ,但这是什么意思?

4 回答

  • 81

    这意味着该算法在给定函数中既是大O又是大Omega .

    例如,如果它是 Ө(n) ,那么有一些常量 k ,这样你的函数(运行时,无论如何),对于足够大的 n 大于 n*k ,以及其他一些常量 K ,使得你的函数小于 n*K 足够大 n .

    换句话说,对于足够大的 n ,它夹在两个线性函数之间:

    k < Kn 足够大 n*k < f(n) < n*K

  • 285

    首先让我们了解大O,大Theta和大欧米茄是什么 . 它们都是sets的功能 .

    大O给出了上半身asymptotic bound,而大欧米茄给出了下限 . Big Theta给出了两者 .

    所有 Ө(f(n)) 也是 O(f(n)) ,但不是相反 .
    T(n) 据说在 Ө(f(n)) 中,如果它在 O(f(n))Omega(f(n)) 中 .
    在术语集中, Ө(f(n)) is the intersection of O(f(n)) and Omega(f(n))

    例如,合并排序最坏情况是 O(n*log(n))Omega(n*log(n)) - 因此也是 Ө(n*log(n)) ,但它也是 O(n^2) ,因为 n^2 渐近"bigger"而不是它 . 但是,它是 not Ө(n^2) ,因为算法不是 Omega(n^2) .

    更深入的数学解释

    O(n) 是渐近上界 . 如果 T(n)O(f(n)) ,则表示从某个 n0 开始,有一个常量 C ,这样 T(n) <= C * f(n) . 另一方面,大欧米茄表示有一个恒定 C2 这样 T(n) >= C2 * f(n)) ) .

    不要混淆!

    不要与最差,最佳和平均案例分析混淆:所有三种(Omega,O,Theta)符号都与算法的最佳,最差和平均案例分析相关 . 这些中的每一个都可以应用于每个分析 .

    We usually use it to analyze complexity of algorithms (就像上面的合并排序示例) . 当我们说“算法A是 O(f(n)) ", what we really mean is "最差情况分析下的算法复杂度类似于”(或者正式,不差于)函数 f(n) 时 .

    为什么我们关心算法的渐近界?

    嗯,有很多原因,但我相信其中最重要的是:

    • 确定确切的复杂度函数要困难得多,因此我们对大O / big-Theta符号进行了分析,这些符号在理论上足够丰富 .

    • 操作的确切数量也取决于平台 . 例如,如果我们有一个16个数字的向量(列表) . 需要多少操作?答案是:这取决于 . 一些CPU允许向量添加,而其他CPU则不允许,因此答案在不同的实现和不同的机器之间变化,这是不期望的属性 . 然而,大O符号在机器和实现之间更加恒定 .

    要演示此问题,请查看以下图表:
    enter image description here

    很明显 f(n) = 2*n 是"worse"而不是 f(n) = n . 但差异并不像其他功能那么激烈 . 我们可以看到 f(n)=logn 很快就会比其他函数低得多,并且 f(n) = n^2 很快就会比其他函数高得多 .
    所以 - 由于上述原因,我们"ignore"常数因子(图中的2 *),并且只采用big-O表示法 .

    在上面的示例中, f(n)=n, f(n)=2*n 将在 O(n)Omega(n) 中 - 因此也将在 Theta(n) 中 .
    另一方面 - f(n)=logn 将在 O(n) (它是"better"而不是 f(n)=n ),但不会在 Omega(n) 中 - 因此也不会在 Theta(n) 中 .
    对称地, f(n)=n^2 将在 Omega(n) 中,但不在 O(n) 中,因此 - 也不是 Theta(n) .


    1通常,虽然并非总是如此 . 当分析类(最差,平均和最佳)缺失时,我们的意思是 the worst case.

  • 0

    Theta(n): 函数 f(n) 属于 Theta(g(n)) ,如果存在正常数 c1c2 ,则 f(n) 可以夹在 c1(g(n))c2(g(n)) 之间 . 即它既给出了上限,也给出了下限 .

    Theta(g(n))= {f(n):存在正常数c1,c2和n1所有n> = n1} 0 <= c1(g(n))<= f(n)<= c2(g(n))

    当我们说 f(n)=c2(g(n))f(n)=c1(g(n)) 时,它代表渐近紧束缚 .

    O(n): 它只给出上限(可能或可能不紧)

    O(g(n))= {f(n):存在正常数c和n1,使得对于所有n> = n1,0 <= f(n)<= cg(n)

    例如:边界 2*(n^2) = O(n^2) 渐近紧,而边界 2*n = O(n^2) 并非渐近紧 .

    o(n): 它只给出上限(从不紧张)

    O(n)和o(n)之间的显着差异是f(n)小于cg(n)所有n> = n1但不等于O(n) .

    例如: 2*n = o(n^2) ,但 2*(n^2) != o(n^2)

  • 13

    大Theta符号:

    什么搞乱伙伴!

    如果我们有正值函数f(n)和g(n)取正值参数n那么Θ(g(n))定义为{f(n):所有n都存在常数c1,c2和n1> = N1}

    其中c1 g(n)<= f(n)<= c2 g(n)

    让我们举一个例子:

    设f(n)=

    g(n)=

    c1 = 5,c2 = 8,n1 = 1

    在所有符号中,Θ符号给出了关于函数增长率的最佳直觉,因为它给我们一个紧密的约束,不像大哦和大ω分别给出上限和下限 .

    Θ告诉我们g(n)与f(n)一样接近,g(n)的增长率尽可能接近f(n)的增长率 .

    see the image to get a better intuition

相关问题