O(n)+ o(nlogn)会是什么?

时间:2015-04-26 14:36:16

标签: performance algorithm

o(nlogn)+ O(n)会是什么?

我猜是O(nlogn)?

f1(n)= o(nlogn)意味着对于每个常数c,存在n0,使得0 <= f1(n)<0。 cnlogn。

并且f2(n)= O(n)意味着存在一些常数c1,使得对于n> 1。 n1,0 <= f2(n)&lt; = c1n。

所以,我可以从中得到的是,有一些常数c1,这样对于n&gt; max(n0,n1),0&lt; = f1(n)+ f2(n)&lt; = c1(nlogn)。

2 个答案:

答案 0 :(得分:4)

如果f是o(n log n)并且g是O(n),则g也是o(n log n),因此 f + g是o(n log n)

你没有得到正面的下限。你不能说f + g不能是o(n)甚至是o(1)。函数0是O(n)和o(n log n)。 sqrt(n)也是如此。

Big-O和little-o符号是幅度的渐近上界。它们不是下限。 Big-Omega和little-omega是下限。 Theta表示您同时具有相同形式的上限和下限。 当你将两个上限加在一起时,你会得到一个上限。你没有获得正下限。特别是,你不能声称总和不是o(n)。

答案 1 :(得分:0)

让我们看看这些函数及其总和的渐近极限。

首先,上限:

F1 = o(n*log(n)), F2 = O(n) = o(n*log(n)), so
F1 + F2 = o (n* log(n))

第二,下限:我们知道F2是O(N),但是对于我们所知道的,或者在零和n * log(n)之间的任何地方,F1都可以是零。所以我们可以肯定地说F1 + F2不是o(N)。

我会让你把所有这些都用'对于每个常数C来说,你自己都存在一个索引'。

编辑:道格拉斯指出,大哦和小哦只是上限,严格来说,你根本不能说下边界。这绝对是正确的。

然而,在大多数情况下编程我们实际关心的是最坏情况,没有人说sqrt(n)= O(n) - 这在技术上是正确的。所以,是的,我们可以谈论下限,在某种意义上,如果我们的意思是最坏情况。