Big Theta问题

时间:2015-12-05 05:09:13

标签: big-o

我不明白这种情况。

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个陈述都不是真的吗?

我不明白为什么第一个既不是真或假,第三个总是如此。

1 个答案:

答案 0 :(得分:1)

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的主导项)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 -...-表示法的上下文中有一些特殊含义,但它不是我自己遇到过的。