Big Theta Questions



我不理解这种情况。

f(n)∈O(g(n)),g(n)∈Θ(f(n))

对于这些情况,以下是正确答案。

f(n)<=g(n)对于所有n>1,既不总是真也不总是假

g(n)∈Ω(f(n)),总是真

f(n)<=θ(g(n)),始终为真

我的逻辑是因为g(n)∈Θ(f(n)),g(n)和f(n)必须具有相同的最高幂(例如:n=n,n^2=n^2)。在这种情况下,这三种说法不是都是真的吗?

我不明白为什么第一个既不总是真的也不总是假的,而第三个总是真的。

Big-O、Big-Ω和Big-Θ表示法在数学中分别将函数的渐近行为描述为上界、下界和紧界(上界和下界)。在SE上,在编程的上下文中,我们通常使用这些符号来描述算法的渐近行为,关于算法要解决的问题的大小(通常这个大小表示为n)。

如需参考,请参阅例如
https://www.khanacademy.org/computing/computer-science/algorithms/asymptotic-notation/a/asymptotic-notation

为了回答你的问题,我们将在渐近(/极限)行为或函数的背景下处理这个问题。让我们逐一介绍f(n)和g(n)的两个属性和三个语句。

性质i) f(n)∈O(g(n))

假设

f(n) ∈ O(g(n)).

对于某个常数k>0,(g(n)的主项提供了f(n)渐近行为的上界,即

f(n) < k*g(n), n sufficiently large.                   (*)

作为我所说的优势项的一个快速例子:如果g(n)是一个多项式,我们有

O(g(n)) = O(a_0 + a_1*n + ... + a_j*n^j) = O(n^j), 

即渐近优势项n^j。

性质ii)g(n)∈Θ(f(n))

假设

g(n) ∈ Θ(f(n)).

对于一些常数k_1>0和k_2>0,k_1*f(n)和k_2*f(n)分别提供了g(n)渐近行为的下界和上界,即

k_1*f(n) < g(n) < k_2*f(n), n sufficiently large.      (**)

同样,当我们描述渐近行为时,真正感兴趣的是g(n)和f(n)的主项。

假设从现在起,对于所有足够大的n,i)和ii)都成立

我们只讨论你的三项发言。

语句a)f(n)<=g(n)对于所有n>1,总是真或假

首先,给定i)和ii),对于"n小于足够大的n",我们不能得出f(n)和g(n)的行为的任何结论,即,对于所有n>1,我们不能说关于f(n。i)和ii)中的性质只描述f(n)和g(n)的渐近行为。如果我们将报表调整为

f(n) <= g(n) for all sufficiently large n; either always true or false,

我们可以分析它。假设以下成立(对于足够大的n):

f(n) <= g(n).                                          (a1)

对于足够大的n,我们也知道(*)和(**)成立,即

(*)  f(n) < k*g(n),       for some constant k>0,       (a2)
(**) f(n) < (1/k_1)*g(n), for some constant k_1>0,     (a3)
     g(n) < k_2*f(n),     for some constant k_2>0,     (a4)

由于(a1)成立,通过假设,我们可以通过选择一些k=(1/k_1)>1来认为(a2)和(a3)是冗余的。这给我们留下了

f(n) <= g(n) < k_2*f(n),  for some constant k_2>0.     (a1, a4)

这只是上面的性质ii),g(n)∈Θ(f(n)),其中我们发现常数k1=1(或者严格地说,k1非常接近1)满足(**)的左手边。

另一方面,如果我们假设f(n)<=g(n)总是假的(足够大的n),我们得到的结果

g(n) < f(n),                                           (a1.false)
g(n) < k_2*f(n),          for some constant k_2>0.     (a4)

它自然成立(k2=1)。

最后,陈述a)有点奇怪。

语句b)g(n)∈Ω(f(n)),总是真

很像i)中(对于上限),考虑到

g(n) ∈ Ω(f(n)),

那么,对于足够大的n,

k*f(n) < g(n),            for some constant k>0,       (b1)

持有。我们已经从ii)中知道这是真的,因为这在(**)的左手边给出

(**) k_1*f(n) < g(n),     for some constant k_1>0.     (b2)

因此,给定ii),g(n)∈Ω(f(n))成立是平凡的。

语句c)f(n)<=θ(g(n)),始终为真

从ii)中调用Big-θ;f(n)∈Θ(g(n))可以描述为

k_1*g(n) < f(n) < k_2*g(n), n sufficiently large,      (c1)

对于某些常数k1>0,k2>0。

在这种情况下,f(n)<=θ(g(n))没有多大意义,因为O(g(n))要么描述了f(n)的一个性质,要么描述了一组符合性质O(g(https://en.wikipedia.org/wiki/Big_O_notation):

"符号O(g(n))也用于表示所有函数的集合满足关系式f(n)=O(g(n));f(n)∈Θ(g(n))"

也许leq运算符"<="在Big的上下文中有一些特殊的含义-符号,但这不是我自己遇到过的东西。

最新更新