为什么Big-O表示法使用O(1)而不是O(k)?

时间:2012-10-23 14:31:02

标签: algorithm complexity-theory big-o notation

如果我正确理解Big-O表示法,k应该是算法效率的恒定时间。考虑到需要一个可变的时间,为什么将恒定时间视为O(1)而不是O(k)?线性增长( O(n + k) )使用此变量将时间向右移动一段特定的时间,那么为什么不等同于常数的复杂性呢?

1 个答案:

答案 0 :(得分:3)

没有这样的线性增长渐近O(n + k),其中k是常数。如果k是一个常量并且你回到算法增长率的极限表示,你会看到O(n + k) = O(n),因为常量会在限制范围内消失。

您的答案可能是O(n + k),因为变量 k基本上与其他输入集n无关。你会在排序算法分析的比较和移动中看到这种情况。

为了回答你关于为什么我们将k放入Big-O表示法(我认为教得很差,导致所有这些混乱)的问题,O()的一个定义(我记得)是如下:

formula

Read: f(n) is in O( g(n) ) iff there exists d and n_0 where for all n > n_0,
                                         f(n) <= d * g(n)

让我们尝试将它应用于我们的问题其中k是常数,因此f(x)= k且g(x)= 1。

  • 是否存在满足这些要求的dn_0

平凡的,答案当然是肯定的。选择d&gt; k和n&gt; 0,定义成立。