【发布时间】:2018-09-15 05:55:36
【问题描述】:
这两个相等吗?我在某处读到 O(2lg n) = O(n)。根据这个观察,我猜答案是否定的,但我并不完全确定。如有任何帮助,我将不胜感激。
【问题讨论】:
-
2^(log n) 或 2 * log n ?
-
第一个,2^(log n)
标签: big-o asymptotic-complexity logarithm
这两个相等吗?我在某处读到 O(2lg n) = O(n)。根据这个观察,我猜答案是否定的,但我并不完全确定。如有任何帮助,我将不胜感激。
【问题讨论】:
标签: big-o asymptotic-complexity logarithm
首先,O(2log(n)) 不等于 O(n)。
要使用大 O 表示法,您会找到一个表示算法复杂性的函数,然后您会在该函数中找到增长率最大的项。最后,您将消除所有可能的常数因素。
例如假设您的算法迭代 4n^2 + 5n + 1 次,其中 n 是输入的大小。首先,您将采用增长率最高的术语,在本例中为 4n^2,然后删除所有常数因子,留下 O(n^2) 复杂度。
在您的示例中,O(2log(n)) 可以简化为 O(log(n))
现在回答你的问题。
在计算机科学中,除非另有说明,否则您通常可以假设 log(n) 实际上表示 n 的对数,以 2 为底。
这意味着,使用对数法则,2^log(n) 可以简化为 O(n)
证明:
y = 2^log(n)
log(y) = log(2^log(n))
log(y) = log(n) * log(2) [Log(2) = 1 since we are talking about base 2 here]
log(y) = log(n)
y = n
【讨论】: