【问题标题】:How to simplify Big-O expressions如何简化 Big-O 表达式
【发布时间】:2018-12-16 03:31:03
【问题描述】:

我正在尝试理解 Big-O 表达式背后的代数。我已经解决了几个问题,但仍然不太清楚它是如何完成的。

在处理权力时,我们是否总是省略较低的权力,例如:

O(10n^4-n^2-10) = O(10n^4)

当涉及乘法时,它有什么不同?例如:

O(2n^3+10^2n) * O(n) = O(2n^3)??

最后,我们如何处理日志?例如:

O(n2) + O(5*log(n))

我认为我们试图摆脱所有常数和较低的权力。我不确定对数是如何参与简化的,以及乘号会有什么不同。谢谢。

【问题讨论】:

  • 技术上:big-O 是一类函数。我不相信将它们相加或相乘是没有意义的。我怀疑你的意思是O((2n^3+10^2n) * n)),但这只是简化为O(2n^4+10^2n^2),与big-O 无关,然后我们又回到了最高功率(并省略了常数因素)。所以我不太确定你的问题是什么。
  • 10^2n 是什么意思 - 这是 (10^2)n 还是 10^(2n)?它们非常不同。

标签: algorithm big-o algebra


【解决方案1】:

Big-O 表达式与微积分(特别是极限)的关系比与代数概念/规则的关系更密切。我发现考虑像您提供的示例这样的表达式的最简单方法是先插入一个小数字,然后插入一个非常大的数字,然后观察结果如何变化:

Expression: O(10n^4-n^2-10)
use n = 2: O(10(2^4) - 2^2 - 10)
           O(10 * 16 - 4 - 10) = 146
use n = 100: O(10(100^4) - 100^2- 10)
             O(10(100,000,000) - 10,000 - 10) = 999,989,990

从中可以看出,n^4 项压倒了表达式中的所有其他项。因此,该算法将被表示为具有 O(n^4) 的运行时间。

所以是的,您的假设是正确的,您应该通常使用最高功率、丢弃常数和丢弃 1 阶项。

对数实际上是“取消”取幂。因此,它们将减少算法的整体 O 运行时间。然而,当它们被添加到指数运行时间时,它们通常会被更大的阶项所否决。在您提供的示例中,如果我们再次使用实数进行评估:

Expression: O(n^2) + O(5*log(n))
use n=2:    O(2^2) + O(5*log(2))
            O(4) + O(3.4657) = 7.46
use n=100:  O(100^2) + O(5*log(100))
            O(10,000) + O(23.02) = 10,023

您会注意到,虽然对数项在增加,但与 n 大小的增加相比,它并不是一个很大的增益。但是,与 n 大小的增加相比,n^2 项仍然产生了巨大的增加。因此,这些表达式的大 O 组合仍然可以归结为:O(n^2)。

如果您有兴趣进一步了解数学方面的内容,您可能需要查看这篇文章:https://secweb.cs.odu.edu/~zeil/cs361/web/website/Lectures/algebra/page/algebra.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多