O(log n)
周围有很多问题,其实际含义是什么,而不是试图再次公开。
但是,在这个特定答案https://stackoverflow.com/a/36877205/10894153上,这张图片对我来说毫无意义:
话虽这么说,但鉴于该答案已获得100票以上的赞成票,并且已经投票超过2年,并且没有任何评论表明可能有任何问题,因此我认为我误会了一些内容,因此请在此处进行澄清(和由于声誉低下,我无法发表评论。
主要,我不理解为什么O(log(n))
时10
是n == 1024
。这不应该是32
,并显示为32^2 = 1024
吗?
显然,这对O(n * log(n))
也有影响,但只需要了解为什么O(log(1024)) = 10
答案 0 :(得分:1)
该表是正确的,除了标题可能会引起误解,因为它们下面的值对应于big-O内部的表达式,而不是big-O本身。但这是可以理解的,因为O表示法的含义是不考虑乘法常数。
log(n)
也会发生类似的情况。 log
表示法还具有忽略对数函数的 base 的含义。但这在这种情况下很好,因为:
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
再次定义(应用两次)。