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

Big o 复杂性。为什么常数不重要?,big-o,Big O,有人能用一种简单的方式向我解释一下为什么常量在大O符号中并不重要吗?为什么在添加常量时复杂性保持不变。这不是一个家庭作业问题,我只是想更好地理解这个问题。让我直截了当地说,大O是用来观察函数接近无穷大时的行为,对吗 我明白了。非常感谢大家 Big-O表示法是指当项目数量发生变化时,资源(时间、内存)的使用情况如何变化。例如,如果我的计算机可以在1秒内对10个项目进行排序,在4秒内对20个项目进行排序,在9秒内对30个项目进行排序,那么它就是O(n²) 如果我能分别在10秒、40秒和90秒内手工对

有人能用一种简单的方式向我解释一下为什么常量在大O符号中并不重要吗?为什么在添加常量时复杂性保持不变。这不是一个家庭作业问题,我只是想更好地理解这个问题。让我直截了当地说,大O是用来观察函数接近无穷大时的行为,对吗


我明白了。非常感谢大家

Big-O表示法是指当项目数量发生变化时,资源(时间、内存)的使用情况如何变化。例如,如果我的计算机可以在1秒内对10个项目进行排序,在4秒内对20个项目进行排序,在9秒内对30个项目进行排序,那么它就是O(n²)


如果我能分别在10秒、40秒和90秒内手工对这些相同的项目进行排序,那么我仍然是O(n²),但我的常数因子要大10倍:同样大小的问题花费的时间是计算机的10倍。

答案是。。。根据定义。如果某个函数
f(x)
是某个函数
g(x)
的大O,那就意味着
f(x)
最终小于某个常数时间
g(x)
。(即,对于足够大的
x
)。常数的实际值无关紧要;“最终”行为的位置也不一样——只要它对足够大的
x
和足够大的常数是真的,你就被覆盖了


你可以加入常数,或者任何具有较小O的东西,这都无关紧要——关键在于哪个项增长最快,哪个项在
x
增长时占主导地位。

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

在实践中,有时常数确实很重要。但是,当我们谈到大O符号时,我们看到的是渐近行为。常数不影响渐近行为的原因是,具有较快增长曲线的函数总是会超过具有较慢增长曲线的函数,即使在存在巨大常数的情况下(当然,达到这一点需要较长的时间)


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

对于复杂性理论来说,它无关紧要,复杂性理论只关心函数如何随着输入大小的增长而缩放

当输入大小朝无穷大增长时,常数根本不影响函数的行为

但是,如果您对实际运行某一段代码感兴趣,那么您可能非常感兴趣的是较大的恒定开销,以及函数在较小输入大小下的执行方式


复杂性理论与实践之间的差异。

常量在大O表示法中并不重要,因为它关注的是可伸缩性。

因为常量与N无关:它不会改变,即它是常量。