我在数据结构书复杂性层次结构图中读到n大于2 log n 。但无法理解如何以及为什么。使用2的幂的简单示例作为n,我得到等于n的值。
书中没有提到,但我假设它基于2(因为上下文是DS复杂性)
a)
O(n) > O(pow(2,logn))
?b)
O(pow(2,log n))
优于O(n)
吗?
答案 0 :(得分:4)
注意2 log b n = 2 log 2 n / log 2 b < / sup> = n (1 / log 2 b)。如果log 2 b≥1(即b≥2),则整个表达式严格小于n,因此为O(n)。如果log 2 b&lt;如图1所示(即,b <2),则该表达式为n 1 +ε的形式,因此不是O(n)。因此,它归结为日志库的内容。如果b≥2,则表达式为O(n)。如果b < 2,则表达式为ω(n)。
希望这有帮助!
答案 1 :(得分:1)
在某处存在一个常数因子,但是假设log
表示自然对数,那么使O(n)等于O(pow(2,log n))并不正确,假设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
表示自然对数。 / p>
O(n ** log(2)) < O(n ** 1)
因为log(2)&lt; 1,O(n ** 3)
。当然,指数之间只有一个恒定的比例,但事实仍然是它们是不同的指数。 O(n ** 2)
出于同样的原因,O(n) = O(n ** 1) > O(n ** log(2)) = O(2 ** log(n))
大于{{1}}:尽管只有一个常数因子,3大于2,但它更大,订单也不同。
我们有
{{1}}
就像书中一样。