我在试着理解大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))我想我们试着摆脱所有的常数和更低的能量。我不知道在简化过程中如何涉及对数,以及乘法符号的作用有多大。谢谢。
发布于 2018-07-08 04:55:15
与代数概念/规则相比,大-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^2项与n的大小的增加相比,仍然产生了巨大的增长。正因为如此,这些表达式中的Big仍然可以归结为: O(n^2)。
如果您有兴趣进一步阅读这方面的数学方面,您可能需要查看以下文章:https://secweb.cs.odu.edu/~zeil/cs361/web/website/Lectures/algebra/page/algebra.html
https://stackoverflow.com/questions/51228756
复制相似问题