如果我正确理解Big-O表示法,k
应该是算法效率的恒定时间。考虑到需要一个可变的时间,为什么将恒定时间视为O(1)
而不是O(k)
?线性增长( O(n + k) )
使用此变量将时间向右移动一段特定的时间,那么为什么不等同于常数的复杂性呢?
答案 0 :(得分:3)
没有这样的线性增长渐近O(n + k)
,其中k
是常数。如果k
是一个常量并且你回到算法增长率的极限表示,你会看到O(n + k) = O(n)
,因为常量会在限制范围内消失。
您的答案可能是O(n + k)
,因为变量 k
基本上与其他输入集n
无关。你会在排序算法分析的比较和移动中看到这种情况。
为了回答你关于为什么我们将k
放入Big-O表示法(我认为教得很差,导致所有这些混乱)的问题,O()的一个定义(我记得)是如下:
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。
d
和n_0
?平凡的,答案当然是肯定的。选择d&gt; k
和n&gt; 0,定义成立。