我在考试中错了这个问题:命名一个既不是O(n)也不是Omega(n)的函数。
在尝试通过youtube自己学习这些东西后,我认为这可能是一个正确的答案:
(n 3 (1 + sin n))既不是O(n)也不是Omega(n)。
这会准确吗?
答案 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 + 1
个N_1
,N_0 + i, i = 0, 1, ..., 4
和sin (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)。