【问题标题】:Big O notation 2^log(n) equals what Big O and can something be greater大 O 表示法 2^log(n) 等于大 O 并且可以更大
【发布时间】:2020-12-29 12:27:08
【问题描述】:
我想知道f(n) = O(g(n)).
我明白:
O(g(n)) = { f(n) there exists constants c, n0 > 0 such that 0 ≤ f(n) ≤ c × g(n) for all n ≥ n0 }
所以我有:
f(n) = 2^(logn)
g(n) = n^1000
我知道f(n) 通常与O(n) 最相似。但是它小于g(n),因此即使大 O 比预期大得多,证明是否成立?
【问题讨论】:
-
大 O 不精确。这是一个上限。说 f 在 O(g) 中只是意味着 f 不比 g 差。如果你知道足够的知识来表达一个精确的渐近界,你可以使用"Θ(g)"(“Big theta”)。
标签:
algorithm
math
big-o
proof
coding-efficiency
【解决方案1】:
如果
f(n) = n
g(n) = n^1000
然后f = O(g)。概括地说,如果f=O(g) 和h 比g“大”,那么f=O(h)。
但这里有一个问题:
f(n) = 2^(logn)
这个log有什么基础?通常我们写O(logn)之类的东西,我们不关心基地; O(log2n) 和 O(log99n) 是一回事,因为 logan = k logb n,其中k 是常数。但是 2logbn 是什么?
2^(logb n) = 2^((log2 n)(logb 2))
= (2^(log2 n))^(logb 2)
= n^(logb 2)
这与 n1000 相比如何?
假设:
b = 2^(1/2000) (just slightly more than 1)
2 = b^2000
logb 2 = 2000
所以在某些情况下,2logn = O(n1000) 是不正确的。