Performance O(logn)澄清

Performance O(logn)澄清,performance,time-complexity,big-o,Performance,Time Complexity,Big O,关于O(logn)以及它的实际含义,有很多问题,不要试图再次打开它 然而,在这个特定的答案上,这个图像对我来说毫无意义: 话虽如此,鉴于该答案获得了超过100票的支持票,并且已经支持了2年多,并且没有任何评论表明可能存在任何错误,我认为我误解了什么,因此要求在这里澄清(由于声誉低下,我无法发表评论) 主要是,我不明白为什么O(log(n))在n==1024时是10。这不应该是32,因为32^2=1024 显然,这对O(n*log(n))也有影响,但只需要理解为什么O(log(1024))=10

关于
O(logn)
以及它的实际含义,有很多问题,不要试图再次打开它

然而,在这个特定的答案上,这个图像对我来说毫无意义:

话虽如此,鉴于该答案获得了超过100票的支持票,并且已经支持了2年多,并且没有任何评论表明可能存在任何错误,我认为我误解了什么,因此要求在这里澄清(由于声誉低下,我无法发表评论)

主要是,我不明白为什么
O(log(n))
n==1024
时是
10
。这不应该是
32
,因为
32^2=1024


显然,这对
O(n*log(n))
也有影响,但只需要理解为什么
O(log(1024))=10

表格是正确的,只是标题可能会误导,因为它们下面的值对应于大O内部的表达式,而不是大O本身。但这是可以理解的,因为O符号具有忽略乘法常数的含义

类似的情况发生在
log(n)
上。
log
符号还具有忽略对数函数底的含义。但在这种情况下,这很好,因为:

log_b(n) = log_2(n)/log_2(b)                 ; see below why this is true
这意味着函数
log_b()
只是一个相乘常数,即
1/log_2(b)
,来自
log_2()

由于该表有意强调big-O表示法忽略乘法常数这一事实,因此可以假设其中的所有日志都是基于
2

特别是,
O(log(1024))
可以解释为
log_2(1024)
,它只不过是
10
(因为
2^10=1024


为了验证上面的等式,我们需要检查一下

log_2(n) = log_2(b)log_b(n)
根据
log
的定义,我们必须看到
n
在右侧是
2
,即

n = 2^{log_2(b)log_b(n)}
但右手边是

{2^{log_2(b)}}^{log_b(n)} = b^{log_b(n)} = n
再次根据定义(应用两次)