【问题标题】:Big O confusion: log2(N) vs log3(N)大 O 混淆:log2(N) 与 log3(N)
【发布时间】:2013-12-11 07:03:41
【问题描述】:

为什么是 O(log2N) = O(log3N) ?

我不明白这一点。大O不代表某事物的上限吗?

log2N 不是比 log3N 大吗?当我绘制它们时, log2N 高于 log3N 。

【问题讨论】:

  • 提示:尝试转换为以 3 为基数,记住常量无关紧要。
  • 您还可以使用限制来帮助找到答案。 lim_{x->infty}(log_2n/log_3n) = ln3/ln2 = 大约 1.58

标签: math big-o logarithm


【解决方案1】:

Big O 不处理常数因子,Logx(n) 和 Logy(n) 的差是常数因子。

换一种说法,对数的底基本上只是修改了图形上一条线/曲线的斜率。 Big-O 不关心图表上曲线的斜率,只关心曲线的形状。如果您可以通过向上或向下移动一条曲线的斜率来使一条曲线与另一条曲线匹配,那么就 Big-O 表示法而言,它们是相同的函数和相同的曲线。

为了尝试透视这一点,也许绘制一些更常见的曲线形状会很有用:

如上所述,只有线的形状很重要,而不是它的斜率。如下图:

...所有的线都是直的,所以即使它们的斜率根本不同,但就大 O 而言,它们仍然是相同的——无论斜率如何,它们都只是 O(N)。使用对数,我们得到大致相同的效果——每条线都会像上一张图​​片中的 O(log N) 线一样弯曲,但是改变对数的底数会使这条曲线围绕原点旋转,所以你会(再次)具有相同的 shape 线,但在不同的坡度上(所以,再一次,就 big-O 而言,它们都是相同的)。所以,回到最初的问题,如果我们改变对数的底,我们会得到看起来像这样的曲线:

在这里,所发生的只是斜率的不断变化可能不太明显,但这正是这里的区别,就像上面的直线一样。

【讨论】:

  • 我还要注意,不只是移位无关紧要,因为我们也忽略了乘以常数。无论 f = n 还是 f = 2n,f 都是 O(n),即使 2n 不是 n 的上移。事实上,我想说忽略常数因素是大 O 的一个更重要的特征。
【解决方案2】:

这是因为改变对数的底数等于乘以一个常数。而且大 O 并不关心常量。

log_a(b) = log_c(b) / log_c(a)

所以要从log2(n)log3(n),您需要将其乘以1 / log(3) 2

换句话说log2(n) = log3(n) / log3(2)

log3(2) 是一个常数,O(cn) = O(n),因此O (log2(n)) = O (log3(n))

【讨论】:

    【解决方案3】:

    这里已经有一些很好的答案,所以也请阅读它们。 要了解为什么 Log2(n) 是 O(log3(n)),您需要了解两件事。

    1) BigO 表示法是什么意思。我建议阅读这个:http://en.wikipedia.org/wiki/Big_O_notation 如果你了解这个,你就会知道2n16n+5 都是O(N)

    2) 对数如何工作。 log2 (N) 和 log10(N) 之间的差异将是一个简单的比率,如果您希望根据 luk32 的答案轻松计算。

    由于不同基数的对数仅相差一个常数比率,而大 O 对常数倍增因子等次要事物无动于衷,因此您经常会发现 O(logN) 实际上省略了基数,因为选择任何常数基数 (例如 2,3,10,e) 在这种情况下没有区别。

    【讨论】:

      【解决方案4】:

      这取决于使用 O 表示法的上下文。当您在算法复杂性推理中使用它时,您对函数的asymptotic behaviour 感兴趣,即当它趋于(正或负)无穷大(或另一个累积点)时它如何增长/减少。

      因此,尽管f(n) = 3n 总是小于g(n) = 1000n,但它们都出现在O(n) 中,因为它们渐近地增长linearly(根据它们的表达式)。

      对于您发布的对数案例,可以采用相同的推理模式,因为不同的基对数对于一个常数因子是不同的,但具有相同的渐近行为。

      改变上下文,如果您对计算算法的确切性能感兴趣,因为您的估计是准确的而不是近似的,您当然更喜欢较低的那个。一般来说,所有计算复杂度的比较都是通过渐近推理进行的近似。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-05-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-24
        • 2012-11-22
        相关资源
        最近更新 更多