如何计算大哦符号

时间:2012-01-30 19:26:46

标签: algorithm complexity-theory big-o

有人可以告诉我2n = O(3n)的计算方法吗?

以下是其他一些例子:

2^4 = O(1)
10n = O(n)
 n log2(n) = O(n log n)

4 个答案:

答案 0 :(得分:5)

big-O有一个严格的数学定义:

f( x )是O(g( x ))如果存在值 x0 > = 0且 k > 0对于所有 x > x0 ,f( x )< = k * g( x )。

要证明有关函数的big-O分类的陈述,您必须说明如何找到 x0 k 值。

答案 1 :(得分:2)

2^4 = 2^4 * 1 <= 2^4 * 1

所以2^4 O(1)为常量2^4

10 * n = 10 * n <= 10 * n

所以10 * n O(n)为常量10

n log2 n = n log n / log 2 <= (1 / log 2) * n log n

所以n log2 n O(n log n)为常量1 / log 2

答案 2 :(得分:1)

一般来说,使用渐近符号的定义,然后产生f(n)= O(g(n))的证明,其中f(n)是你的函数,g(n)是你的约束试图证明。

第一个例子:

2n =? O(3n)
f(n) = 2n, g(n) = 3n
need c such that for n > n0, f(n) <= c*g(n); guess c = 1
We have f(n) = 2n <= 3n = c*g(n) for n >= 0, so
2n = f(n) = O(g(n)) = O(3n)

对于你的第二个例子:

2^4 =? O(1)?
f(n) = 2^4, g(n) = 1
need c such that for n > n0, f(n) <= c*g(n); guess c = 2^4 + 1
We have f(n) = 2^4 <= 2^4 + 1 = c*g(n), so
2^4 = f(n) = O(g(n)) = O(1)

你的第三个例子实际上与第一个例子相同。

你的第四个例子是错的;

是错误的
n log^2(n) = O(n log n)

确实

n log(n^2) = O(n log n)

但这是一个不同的表达方式。为了看到n log ^ 2(n)不是O(n log n),我们可以这样说:让c是一个任意的固定常数。我们可以找到一个n,使得c * n * log(n)<的n * log ^ 2(n)的。我们得到

c*n*log(n) < n*log^2(n)
c < log(n)

因此选择n = 2 ^(c + 1)。因此,对于n> 0,不存在n0。 n0,f(n)&lt; = c * g(n)。

编辑:在第四个例子中,如果你的意思是“log2(n)”n的log-base-two,那么是,nlog2(n)= O(nlogn)。通常,在进行算法复杂性时,除非另有说明,否则对数应理解为基数为2。对不起,感到困惑。

答案 3 :(得分:0)

有多种方法证明这一点:

可以使用限制:

f(n)= O(g(n))iff如下:

                f(n)
   limsup    ----------  < infinity
x->infinity     g(n)

因此,如果您在限制中使用2n/(3n),则为1.5