假设f(n)是算法的运行时间。
根据O(n)
的功能定义,如果f(n)<=c*g(n)
,则f(n)=O(g(n))
n0<=n
。
常数c可以采用的值范围是什么?
答案 0 :(得分:3)
根据定义(例如here),任何正数,只要它是常数。
例如,n^2
中O(n)
不,因为没有正数c
,所有n^2 = cn
n
};这种平等很容易被解决到c = n
,但根据定义,n
不是常数。
答案 1 :(得分:1)
C
可以是任何东西(显然是零以上)。无所谓:0.1
或1
或1.000.000
。唯一的事情是:必须是恒定的 - 即可以一劳永逸地定义。它不能取决于n
。当然,C
会影响总算法性能 - 但是big-O的目的是估计性能,而不是精确计算(好吧,从定义开始)
答案 2 :(得分:1)
任何范围。
c
是一个constance意味着它不依赖于问题的大小n
。每当n
的值发生变化时,c
保持不变。
答案 3 :(得分:1)
它可以是任何正数。如果它是0你什么都不做,如果它是负面的你就会破坏它。
简单来说,c是一个由两半组成的常数:
答案 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+1
和g(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