BIG O表示中的常数c

时间:2014-02-28 09:52:06

标签: big-o

假设f(n)是算法的运行时间。

根据O(n)的功能定义,如果f(n)<=c*g(n),则f(n)=O(g(n)) n0<=n

常数c可以采用的值范围是什么?

6 个答案:

答案 0 :(得分:3)

根据定义(例如here),任何正数,只要它是常数。

例如,n^2O(n) ,因为没有正数c,所有n^2 = cn n };这种平等很容易被解决到c = n,但根据定义,n不是常数。

答案 1 :(得分:1)

C可以是任何东西(显然是零以上)。无所谓:0.111.000.000。唯一的事情是:必须是恒定的 - 即可以一劳永逸地定义。它不能取决于n。当然,C会影响总算法性能 - 但是big-O的目的是估计性能,而不是精确计算(好吧,从定义开始)

答案 2 :(得分:1)

任何范围。

c是一个constance意味着它不依赖于问题的大小n。每当n的值发生变化时,c保持不变。

答案 3 :(得分:1)

它可以是任何正数。如果它是0你什么都不做,如果它是负面的你就会破坏它。

简单来说,c是一个由两半组成的常数:

  1. 算法的一半。例如,你的算法必须在整个输入集合中迭代5次。所以常数将是5.如果你的另一个算法迭代3次。那么常数将是3,但你的两个算法都会有复杂度O(n)。
  2. 硬件一半。是时候在你的电脑上计算一个操作了。如果你开始在Pentium 1和现代Xeon上使用相同的集合实现你的算法,很明显Xeon会更快地计算结果。

答案 4 :(得分:0)

虽然c独立于n,但允许一个人排除小n的某些特殊情况,并仅为c确定n ≥ n0。< / p>

例如,

n ≤ n^2 for n ≥ 1

但也

n ≤ 0.01*n^2 for n ≥ 100

答案 5 :(得分:0)

假设f(n)=n+1g(n)=n^2

我们试图证明f(n)=O(g(n))

对于n = 1,f(n)= 2,g(n)= 1 f(n)<=c * g(n)如果c = 2且现在c> n

对于n = 2,f(n)= 3,如果c = 1并且现在c <1,则g(n)= 4 f(n)<=c * g(n)。 Ñ

所以c和n之间的比较是没有意义的。 注意:c是常量(其值永远不会改变)

我们可以说f(n)=O(g(n) n>=1如果c=2

f(n)=O(g(n) n>=2 c=1