我被要求证明或反驳以下猜想:
对于任何给定的常数c> 0 |如果f(n)= O(h(n))则c * f(n)= O(h(n))
我想出了以下反例:
设f(n)= n且c = n + 1。那么c * f(n)=(n + 1)n = n ^ 2 + n = O(n ^ 2),
而f(n)= n = O(n)
因此,猜想不正确,因为当f(n)= n且c = n + 1时,O(n ^ 2)!= O(n)。
现在,我发现了以下定理:
定理:任何常数值都是O(1)。
除此之外:您经常会听到所描述的持续运行时算法 如O(1)。
推论:给定f(x)为O(g(x))和常数a,我们 知道af(x)是O(g(x))。
也就是说,如果我们有一个函数乘以常数,我们可以忽略 大O中的常数。
为什么会这样,为什么我错了?
答案 0 :(得分:2)
你没有在足够大的范围内考虑这个问题:
如果你有一个变量, n 乘以常量 k 并且 n 正在增长, k的效果被最小化。从小学的微积分来看,它成为一个极限问题。
答案 1 :(得分:0)
c
是常量,n
是变量,因此n+1
不是常数