这个函数会是 O(n^2log_2(n)) 吗?

Would this function be O(n^2log_2(n))?

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

这样的函数

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

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

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

时,C2 = 128 n2 = 1

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

O(65536 n2 + 128 n log2n) 与 O(n2 + n log2n) 因为您可以忽略乘法常数。 O(n2 + n log2n) 等于 O(n2) 因为 n2 比 n 增长得更快 log2n.

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

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

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

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

n2 + n log2n

因为 n2 > n log2n 随着 n 接近无穷大

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