算法分析(Big O和Big Omega)

时间:2012-12-14 01:30:28

标签: algorithm big-theta big-o

我在考试中错了这个问题:命名一个既不是O(n)也不是Omega(n)的函数。

在尝试通过youtube自己学习这些东西后,我认为这可能是一个正确的答案:

  

(n 3 (1 + sin n))既不是O(n)也不是Omega(n)。

这会准确吗?

2 个答案:

答案 0 :(得分:5)

  

命名既不是O(n)也不是Omega(n)

的函数

f ∈ O(g)表示商

f(x)/g(x)
对于所有足够大的x

从上面开始。

另一方面,

f ∈ Ω(g)表示商

f(x)/g(x)
对于所有足够大的x

与零相差很远。

所以找到既不是O(n)也不是Ω(n)的函数意味着找到一个函数f,使得商

f(x)/x

变得任意大,并且在每个区间[y, ∞)任意接近于零。

  

我认为这可能是一个正确答案:(n^3 (1 + sin n))既不是O(n)也不是Omega(n)。

让我们把它插入我们的商:

(n^3*(1 + sin n))/n = n^2*(1 + sin n)

n^2增长到无穷大,系数1 + sin n大于1,大约每六个n中有三个[y, ∞)。因此,每个区间K > 0的商数变得任意大。给定N_0 = y + K + 1N_1N_0 + i, i = 0, 1, ..., 4sin (N_0+i) > 0最小f(N_1)/N_1 > (y + K + 1)² > K² + K > KΩ(n)。然后是sin n

对于cos (π*n)部分,虽然我认为它很满意,但要证明并不容易。

但是,我们可以对函数进行一些修改,保留将增长函数与振荡函数相乘的思想,使证明变得简单。

让我们选择f'(n) = n^3*(1 + cos (π*n) + 1/n^4) ,而不是 / n^3*(2 + 1/n^4), if n is even f'(n) = < \ 1/n , if n is odd ,并且为了抵消零,请为其添加快速递减函数。

f'

现在,

n

很明显{{1}}既不是来自上方,也不是来自{{1}}的任何正常数倍。

答案 1 :(得分:0)

我会考虑二进制搜索。这是O(log N)和Ω(log N)。由于Omega被定义为下限,因此不允许超出函数本身 - 因此O(log N)绝对不是Ω(N)。

我认为对删除的答案的一些评论值得一些......澄清 - 甚至可能是彻底的纠正。引用CLRS,“Ω符号表示函数的下界在常数因子内。”

由于N 2 与N的差异大于常数因子,因此N 2 不是Ω(N)。