我不明白这种情况。
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)。在这种情况下,所有3个陈述都不是真的吗?
我不明白为什么第一个既不是真或假,第三个总是如此。
答案 0 :(得分:1)
Big-O,Big-Ω和Big-Θ符号在数学中描述了函数的渐近行为,分别为上限,下限和紧束(上限和下限)。在SE上,在编程的上下文中,我们通常使用这些符号来描述算法的渐近行为,关于算法要解决的问题的大小(通常这个大小用n表示)。
为了回答你的问题,我们将在渐近(/限制)行为或函数的背景下对待这个主题。让我们逐一介绍f(n)和g(n)的两个属性和三个语句。
属性i) f(n)∈O(g(n))
鉴于是
f(n) ∈ O(g(n)).
对于某些常数k> 0,(g的主导项)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)的主要术语。
从现在开始假设i)和ii)两个都持有,因为所有足够大的n
我们只转到你的三个陈述。
声明a) f(n)&lt; = g(n)所有n&gt; 1,总是为真或假
首先,给定i)和ii),我们不能得出f(n)和g(n)对“n小于n的足够大”的行为的任何结论,即,我们不能说任何关于对于所有n> 1 ,f(n)和g(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)),其中我们发现常数k_1 = 1(或严格地说,k_1非常接近1)满足左边的(**)。
另一方面,如果我们假设f(n)&lt; = g(n)总是假(足够大的n),我们得出结果
g(n) < f(n), (a1.false)
g(n) < k_2*f(n), for some constant k_2>0. (a4)
当然,它持有(k_2 = 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)&lt; =Θ(g(n)),始终为真
从ii)召回Big-Θ; f(n)∈Θ(g(n))可以描述为
k_1*g(n) < f(n) < k_2*g(n), n sufficiently large, (c1)
对于某些常数k_1> 0,k_2> 0。
在这种情况下,f(n)&lt; =Θ(g(n))没有多大意义,因为O(g(n))或者描述了f(n)或f函数集的性质( n)符合属性O(g(n))(在渐近行为的背景下。来自维基百科的Big O符号文章(https://en.wikipedia.org/wiki/Big_O_notation):
“符号O(g(n))也用于表示所有函数的集合 f(n)满足关系f(n)= O(g(n)); f(n)∈Θ(g(n))“
也许leq运算符“&lt; =”在Big -...-表示法的上下文中有一些特殊含义,但它不是我自己遇到过的。