复杂。为什么常数不重要?

时间:2012-02-02 02:54:10

标签: big-o

有人可以用一个简单的方法向我解释为什么常数对大O符号无关紧要?添加常量时,为什么复杂性保持不变。这不是一个功课问题我只想更好地理解这一点。让我得到这个直接的大O是为了看到一个函数的行为,因为它接近无穷大吧?

我明白了。非常感谢大家。

6 个答案:

答案 0 :(得分:7)

对于复杂性理论并不重要,因为复杂性理论仅仅感兴趣函数如何随着输入大小的增加而缩放。

常量不会影响函数的行为方式,因为输入大小会向无穷大方向增长。

但是,如果您对实际运行某段代码感兴趣,那么您可能会对较大的常量开销以及该函数如何针对较小的输入大小执行操作感兴趣。

复杂性理论与实践的区别。

答案 1 :(得分:5)

实际上,有时常量 很重要。但是,当我们谈到Big O符号时,我们正在研究渐近行为。常量不影响渐近行为的原因是因为具有更快增长曲线的函数将总是超越具有较慢增长曲线的函数,即使存在巨大的常数(尽管它将需要当然,到达那里的时间更长。

因此我们说常数“无关紧要”,因为它永远不会改变曲线之间的渐近关系。

答案 2 :(得分:3)

答案是......根据定义。如果某个函数f(x)是某个函数g(x)的大O,则只表示f(x)“最终”小于某些常量时间g(x)。 (即足够大x)。常数的实际值无关紧要; “最终”行为的位置也不存在 - 只要它足够大x和足够大的常数,你就会被覆盖。

你可以添加常量,或任何具有较小O的东西,并且无关紧要 - 所有关于哪个术语增长最快,以及哪个术语在x增长时占主导地位。

答案 3 :(得分:1)

Big O解释了随着输入变大,复杂性如何变化。输入越大,重要性越小。例如,当n达到一百万或十亿时,将某些东西乘以10远不如平方。 Big O不是一个精确的度量,它是一种将算法置于粗略的复杂类中的方法,因此您可以舍入常量,因为它们对于大的n值没有意义。

答案 4 :(得分:1)

常量在big-O表示法中并不重要,因为关注点是可伸缩性。

答案 5 :(得分:0)

Big-O表示法是指当项目数量发生变化时资源(时间,内存)的使用情况如何变化。因此,例如,如果我的电脑可以在1秒内分类10个项目,在4秒内分类20个项目,在9秒内分类30个项目,那么它就是O(n²)。

如果我可以分别在10秒,40秒和90秒内手动对这些物品进行分类,那么我仍然是O(n²),但我的常数因子是10倍:同样的问题需要我是计算机的十倍。