再次强调,问题是如果g(n)是小o(f(n)),那么f(n)+g(n)是Theta(f(n))。
请注意,这是小o,不是大O!
到目前为止,我已经成功地(轻松地)展示了:
g(n)=o(f(n))-->g(n)然后,g(n)+f(n)<(c+1)*f(n)--> (g(n)+f(n))=O(f(n))
然而,对于显示大Omega,我不确定该怎么做。
我这样做对吗?
编辑:每个人都提供了巨大的帮助,但我只能选择一个。谢谢。
一种方法是在n趋向无穷大时取(f(n) + g(n)) / f(n)的极限。如果这收敛于一个有限的非零值,那么f(n) + g(n) = Θ(f(n))。
假设对于足够大的n,f(n)不为零,则上述比率在极限情况下为
(f(n) + g(n)) / f(n)
= f(n) / f(n) + g(n) / f(n)
= 1 + g(n) / f(n).
因此,当n趋向无穷大时,上述表达式的极限收敛于1,因为比率趋近于零(这就是g(n)是o(f(n))的含义)。
Little-o notation
Formally, that
g(n) = o(f(n))
(org(n) ∈ o(f(n))
) holds for sufficiently largen
means that for every positive constantε
there exists a constantN
such that
|g(n)| ≤ ε*|f(n)|, for all n > N (+)
来自https://en.wikipedia.org/wiki/Big_O_notation#Little-o_notation。
Big-Θ notation
h(n) = Θ(f(n))
means there exists positive constantsk_1
,k_2
andN
, such thatk_1 · |f(n)|
andk_2 · |f(n)|
is an upper bound and lower bound on on|h(n)|
, respectively, forn > N
, i.e.
k_1 · |f(n)| ≤ |h(n)| ≤ k_2 · |f(n)|, for all n > N (++)
给定:g(n) ∈ o(f(n))
因此,在我们的情况下,对于每个ε>0
,我们可以找到一些常数N
,使得对于我们的函数g(n)
和f(n)
,成立(+)
。因此,对于n>N
,我们有:
|g(n)| ≤ ε*|f(n)|, for some ε>0, for all n>N
Choose a constant ε < 1 (recall, the above holds for all ε > 0),
with accompanied constant N.
Then the following holds for all n>N
ε(|g(n)| + |f(n)|) ≤ 2|f(n)| ≤ 2(|g(n)| + |f(n)|) ≤ 4*|f(n)| (*)
(*)
中最左边的不等式并除以2,我们得到:|f(n)| ≤ |g(n)| + |f(n)| ≤ 2*|f(n)|, n>N (**)
(++)
中介绍的Big-Θ符号的定义,其中常数k_1 = 1
,k_2 = 2
,以及h(n) = g(n)+f(n)
。因此,(**) => g(n) + f(n) is in Θ(f(n))
g(n) ∈ o(f(n))
意味着 (g(n) + f(n)) ∈ Θ(f(n))
。0 <= g(n)
;这应该可以给出g(n) + f(n)
的一个下界。