找到函数的大O.

时间:2010-02-07 08:11:53

标签: algorithm big-o

请帮我完成以下两项功能,我需要简化它们。

  

O(nlogn + n ^ 1.01)

     

O(log(n ^ 2))

我目前的想法是

  

O(nlogn + n ^ 1.01)= O(nlogn)

     

O(log(n ^ 2))= O(log(n ^ 2))

请帮助我解决这两个简化问题并简要说明一下,谢谢。

3 个答案:

答案 0 :(得分:12)

对于第二个,你有O(lg(n²))= O(2lg(n))= O(lg(n))。

对于第一个,你有O(nlg(n)+ n ^(1.01))= O(n(lg(n)+ n ^(0.01)),你要决定lg(n)或者n ^(0.01)变大。

为此目的,你可以得到n ^ 0.01 - lg(n)的导数,看看是否在n - >的极限下;无穷大,它是正的还是负的:0.01 / x ^(0.99) - 1 / x;在极限处,x大于x ^ 0.99,因此差异为正,因此n ^ 0.01渐近增长比log(n)快,因此复杂度为O(n ^ 1.01)。

答案 1 :(得分:7)

记住:

log (x * y) = log x + log y
对于任何n^k

log n的增长速度始终高于k>0

答案 2 :(得分:1)

把第一个问题O(n*log(n)+n^1.01)放在第一个问题nlog(n) > n^1.01第一个函数比第二个加法更快,即n O(n更大大约3,它是log(n)) O(log(n^2)) = O(log(n*n)) = O(log(n)+log(n)) = O(2*log(n)) = O(log(n))

在第二种情况下,使用KennyTM提到的公式,我们得到

{{1}}

因为可以忽略常数项。