我不理解这种情况。
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的上下文中有一些特殊的含义-符号,但这不是我自己遇到过的东西。