所以给我一个函数,如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但我为常数选择的数字似乎有点高,有没有办法检查这个?
答案 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 是上限。