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

时间:2015-06-20 02:28:05

标签: big-o computer-science

所以给我一个函数,如65536 n 2 + 128 n log 2 n

并且唯一的方法是O(n 2 log 2 n)是

C = 65664,n0 = 2,因为

,所有n≥2 当65536≤C1* n 2
时,

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

时,C2 = 128 n2 = 1

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

2 个答案:

答案 0 :(得分:2)

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

另外,顺便说一下,对数的基数在Big-O分析中无关紧要。所有对数都以相同的速率增长。毕竟,log 2 n = log n / log 2,可以计算出乘法常数。你可以简单地说log n而不是log 2 n。

警告:从技术上讲,它实际上是一个真实的陈述,说65536 n 2 + 128 n log 2 n∈O(n 2 log 2 n)因为Big-O给出 上限,但不是严格的上限。如果有意义的话,O(n 2 )是 lower 上限。

那就是说,你不应该想出O(n 2 log 2 n)。这仅仅是意外地将加法变成乘法的结果。根据经验,如果你在Big-O公式中添加了多个东西,你只需要弄清楚哪一个增长最快然后丢弃其他东西。

答案 1 :(得分:0)

让我们简化这里的等式,因为常数并不重要:

n 2 + n log 2 n

因为n 2 > n log 2 n为n approches infinity

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