O(n ^ 2)大于O((n ^ 2)logn)

时间:2013-02-12 09:27:17

标签: algorithm complexity-theory time-complexity

O(n ^ 2)是否大于O(n ^ 2 log n)?
如是 ?怎么样? 我们能举一个简单的例子吗 另外,
以下代码的复杂性是什么?

int unknown(int n){
   int i,j,k=0;
   for(i=n/2;i<=n;i++){
     for(j=2;j<=n;j=j * 2){
         k =k + n/2;
     }
  }
return k;
}

什么是返回值k的复杂性?

3 个答案:

答案 0 :(得分:12)

O(n^2)O((n^2) * log(n))子集,因此第一个是“更好”,很容易看出,因为log(n)是一个增加的函数通过将某些东西与它相乘,你得到一个“更高”的函数,然后是原始函数(f(n) <= f(n) * log(n)为每个增加的非负值fn>2

你给出的代码捕捉是O(nlog(n)),因为内循环每次外循环迭代重复log(n)次,外循环重复n / 2次 - 这给你n/2 * log(n)O(nlog(n))

答案 1 :(得分:2)

Ln(e)== 1,因此大于e(~2.7)的任何值都将给出Ln(n)> 1。

因此对于所有n,其中n> e,O(n ^ 2 ln(n))> O(N ^ 2)

答案 2 :(得分:0)

我假设你的意思是O((n^2) * log n),但答案是一样的,如果它是n^(2 * log n),你需要证明的基本相同。我也只会考虑非负函数,以便用绝对值来节省一些麻烦。

答案是O(n^2)O((n^2) * log n)的严格子集。它更小。

首先证明它是一个子集:假设fO(n^2)。然后存在Mk,以便所有n >= Mf(n) <= k(n^2)

L = max(M, e)(其中e是对数基数)。然后适用于所有n >= Llog(n) >= log(e) == 1(自n >= 1}和f(n) <= k(n^2)(自n >= M起)。

因此对于所有n >= Lf(n) <= k(n^2) * log(n)。因此f位于O((n^2) * log n)

其次,证明它是一个严格的子集:让g成为函数g(n) = (n^2) * log n,因此g位于O((n^2) * log n)

对于任何k,请L = e^k。然后,对于任何n > Llog(n) > k以及g(n) > n^2 * k

因此g不在O(n^2),因为Mk不存在n >= Mg(n) <= k * n^2。< / p>