我试图了解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))
我认为我们试图摆脱所有常数和更低的权力。我不确定简化中如何涉及对数以及乘法符号的作用是什么。谢谢。
答案 0 :(得分: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项仍在产生巨大的增加。因此,这些表达式的Big O仍然可以归结为:O(n ^ 2)。
如果您有兴趣进一步了解数学方面的内容,则可以查看以下文章:https://secweb.cs.odu.edu/~zeil/cs361/web/website/Lectures/algebra/page/algebra.html