请帮我完成以下两项功能,我需要简化它们。
O(nlogn + n ^ 1.01)
O(log(n ^ 2))
我目前的想法是
O(nlogn + n ^ 1.01)= O(nlogn)
O(log(n ^ 2))= O(log(n ^ 2))
请帮助我解决这两个简化问题并简要说明一下,谢谢。
答案 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}}
因为可以忽略常数项。