【问题标题】:Would this function be O(n^2log_2(n))?这个函数会是 O(n^2log_2(n)) 吗?
【发布时间】:2015-06-20 02:28:05
【问题描述】:

所以我得到了一个类似 65536 n2 + 128 n log2n

的函数

而 O(n2 log2n) 的唯一方法是 if

C = 65664,n0 = 2 对于所有 n ≥ 2,因为

C1 = 65536 n1 = 2 当 65536 ≤ C1*n2
C2 = 128 n2 = 1 当 128 ≤ C2*n

但是我为常数选择的数字似乎有点高,有没有办法检查这个?

【问题讨论】:

  • n^2 或 nlog_2(n) 哪个函数增长更快?
  • n^2,但那会是 O((n^2)(log_2(n))) 吗? @dbarnes

标签: big-o computer-science


【解决方案1】:

O(65536 n2 + 128 n log2n) 与 O(n2 + n log 相同2n) 因为你可以忽略乘法常数。 O(n2 + n log2n) 等于 O(n2) 因为 n2 比 n log2n 增长快。

另外,顺便说一下,对数的底在 Big-O 分析中并不重要。所有对数都以相同的速度增长。毕竟,log2n = log n / log 2,乘法常数可以因式分解。你可以简单地说 log n 而不是 log2n.

警告:从技术上讲,说 65536 n2 + 128 n log2n ∈ 实际上是正确的说法。 O(n2 log2n) 因为 Big-O 给出了 一个 上限,但不是一个严格的上限。 O(n2) 是 lower 上限,如果这有意义的话。

也就是说,你不应该想出 O(n2 log2n)。那只是不小心把加法变成了乘法的结果。根据经验,如果您在 Big-O 公式中将多个事物加在一起,您只需找出其中哪一个增长最快,然后丢弃其他的。

【讨论】:

  • 谢谢你。问题是询问函数列表是否“可能”是 (n^2logn) 并且那个函数看起来有点奇怪。
【解决方案2】:

让我们在这里简化方程,因为常数并不重要:

n2 + n 对数2n

因为 n2 > n log2n as n 接近无穷

Big-O 是 O(n2),因为 n2 是上限。

【讨论】:

    猜你喜欢
    • 2021-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-10
    • 2012-07-05
    相关资源
    最近更新 更多