什么是日志(O(n * log(n)))?

时间:2016-05-26 04:45:13

标签: algorithm math big-o

我目前正在学习算法课程中的大O符号,我偶然发现了困扰我的这个特殊问题。如果我们知道正式定义成立,我们可以将O(n lg(n))表示为c * n * lg n吗?意思是,如果f(n)< = c n lg n,并且定义适用于某些常数,那么O(n lg n)可以表示为c * n * lg n?如果我的假设是真的,那么我们可以这样做:

= lg(O(n lg n))

= lg(c * n * lg n)

= lg(c)+ lg(n)+ lg(lg(n))

如果lg(n)是这种情况下的最高阶项,那么这会简化为O(lg(n))吗?由于所有低阶项最终都会被最高阶项重叠?

3 个答案:

答案 0 :(得分:2)

是的,你是完全正确的,你的数学是正确的。

enter image description here

答案 1 :(得分:2)

你的问题有点难以理解。我想你在问:

  

假设我们有一个函数f渐近或小于O(n lg n)的速度。函数lg ∘ f是否渐近或小于O(lg n)的速度?

是的,确实如此。

更新:评论员Paul Hankin指出了一个反例。也许这是对的?

  

假设我们有一个函数f,它以O(n lg n)的速率渐近渐近增长。函数lg ∘ f是否以O(lg n)

的速率渐近渐增

我认为答案是肯定的。

答案 2 :(得分:0)

您正试图展示lg(O(n lg n)) = O(lg n)。这有些非标准符号,但这意味着对于f中的所有O(n lg n)g中的O(lg n)都是log(f) = g。这在维基百科上解释:https://en.wikipedia.org/wiki/Big_O_notation#Multiple_usages

这句话并不像写的那样真实。例如,f = 2^(-n)位于O(n lg n),但lg(f) = -n位于O(lg n)。但如果我们将自己限制在大于f的{​​{1}},那么它就是真的。

如果1,那么f = O(n lg n)就是c所有nf(n) < cn lg n。然后是lg(f(n)) < lg(c) + lg(n) + lg(lg(n)) = O(lg n)。自lg(f(n)) > 0起,我们就拥有lg(f(n)) = O(lg n)。这基本上是您对问题的证明,对定义进行了一些额外的关注,并确保lg(f(n))不大而且是负面的。