如果f(n)= O(h(n))则c * f(n)= O(h(n))对于所有c> 1。 0 - 证明挑战?

时间:2015-02-16 03:45:08

标签: time-complexity

我被要求证明或反驳以下猜想:

对于任何给定的常数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中的常数。

为什么会这样,为什么我错了?

2 个答案:

答案 0 :(得分:2)

你没有在足够大的范围内考虑这个问题:

如果你有一个变量, n 乘以常量 k 并且 n 正在增长, k的效果被最小化。从小学的微积分来看,它成为一个极限问题。

答案 1 :(得分:0)

c是常量,n是变量,因此n+1不是常数