有人可以告诉我2n = O(3n)
的计算方法吗?
以下是其他一些例子:
2^4 = O(1)
10n = O(n)
n log2(n) = O(n log n)
答案 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
。