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

Math O(n)大于O(2^n),math,optimization,complexity-theory,time-complexity,asymptotic-complexity,Math,Optimization,Complexity Theory,Time Complexity,Asymptotic Complexity,我在《数据结构》一书的复杂性层次图中读到,n大于2logn。但无法理解如何以及为什么。使用2的幂为n的简单例子,我得到的值等于n 书中并没有提到它,但我假设它以2为基数(因为上下文是DS复杂性) a) 是不是O(n)>O(pow(2,logn)) b) O(pow(2,logn))比O(n)好吗 请注意,2logb n=2log2n/log2b=n(1/log2b)。如果log2b≥ 1(即b≥ 2) ,则整个表达式严格小于n,因此为O(n)。如果log2b

我在《数据结构》一书的复杂性层次图中读到,n大于2logn。但无法理解如何以及为什么。使用2的幂为n的简单例子,我得到的值等于n

书中并没有提到它,但我假设它以2为基数(因为上下文是DS复杂性)

a) 是不是
O(n)>O(pow(2,logn))

b)
O(pow(2,logn))
O(n)
好吗

请注意,2logb n=2log2n/log2b=n(1/log2b)。如果log2b≥ 1(即b≥ 2) ,则整个表达式严格小于n,因此为O(n)。如果log2b<1(即b<2),则该表达式的形式为n1+ε,因此不是O(n)。因此,它归结为什么是日志库。如果b≥ 2,则表达式为O(n)。如果b<2,则表达式为ω(n)


希望这有帮助

其中某个地方有一个常数因子,但它不适合使O(n)等于O(pow(2,logn)),假设
log
表示自然对数

n = 2 ** log2(n)            // by definition of log2, the base-2 logarithm
  = 2 ** (log(n)/log(2))    // standard conversion of logs from one base to another
n ** log(2) = 2 ** log(n)   // raise both sides of that to the log(2) power
由于日志(2)<1,
O(n**log(2))
。当然,指数之间只有一个恒定的比率,但事实是它们是不同的指数
O(n**3)
大于
O(n**2)
的原因是相同的:尽管3只比2大一个常数因子,但它更大,顺序也不同

因此,我们有

O(n) = O(n ** 1) > O(n ** log(2)) = O(2 ** log(n))

就像书中写的一样。

我认为它们是一样的。把两者都记下来。得出结论。即使对数底与2不同,它们也是一样的。这个问题似乎是离题的,因为它是关于数学的。因此,这意味着两者都是相等的,我们不能说b=2时一个比另一个好?当我们一般谈论登录DS复杂性时,我们总是用基数2来表示它吗?@HimanshuR对数在计算机科学中通常是以基数2表示的,尽管你不应该依赖它。严格的不等式只适用于b>2,而不像@HimanshuR正确地指出的那样,在这个答案中,b>=2。我数学不好,所以我无法告诉你是如何从
2^(log2(n)/log2(b))
n^(1/log2(b))
.2^(log_2 n)=n,而不是n^ln 2吗?@templatetypedef:ganbustein假设的是自然对数,而不是二进制对数。