什么时候我们会考虑渐近符号的常数?

时间:2016-01-03 01:38:24

标签: constants asymptotic-complexity notation

我认为:忽略常量应该有限制!

当常数变得太大时,我们应该考虑它,因为它会产生巨大的差异

那有什么规则吗?

1 个答案:

答案 0 :(得分:1)

请注意,当我们谈论渐近行为时,我们会描述限制行为

如果你详细了解任何渐近分析符号(Big Oh,Big Theta,Big Omega),你会发现常数,实际上所有感兴趣的情况,对我们的结果都没有影响。 分析函数'或算法'渐近行为

作为一个例子,让我们松散地看一下Big-O表示法的定义:

  如果我们能找到任何正面集合,则{p> f(n)据说在O(g(n))中   常量kN|f(n)| ≤ k · |g(n)|适用于所有n > N

现在,让我们说f(n)是线性的

f(n) = n + C

并且C非常大。即使在这种情况下,f(n)渐近限制行为也不会对常量感兴趣。从上面的定义中,我们可以选择我们自己的常量k,以便以下保持

k·n > C, for all n > N

即,在我们对f(n)的渐近分析过程中,我们可以随意选择k,甚至等于C。这会产生(假设N>1,因此n>1

f(n) = n + C < { n > 1 } < n + n·C = { choose k = C } 
             = n + n·k < 2kn = { set l = 2k } = l·n
             = { g(n) = n } = l·g(n)

有了这个,我们已经显示f(n) is in O(n),即使C中的常量字词f(n) “非常大”

同样适用于您可以烹饪的任何功能或算法;常数项对函数的渐近行为没有影响,无论它们有多大(我们研究限制行为,而不是状态!)。即使是h(n) = C的常数函数,C的大小也不会对渐近分析的结果产生任何影响(此处为Big-O);我们可以自由选择k,轻松推导h(n) is in O(1)(即常数时间:增长问题大小不会增加计算时间,例如哈希表查找)。

现在,您可以在一般情况下看一下函数中的大常数项的重要性以及算法的重要性,但基于上述情况,这不会特别与渐近分析有关。 。

有关多项式的渐近分析(Big-Oh)中常数增加如何对分析结果没有任何影响的示例,请参阅: