对数函数的渐近复杂性

时间:2015-09-29 13:28:02

标签: algorithm big-o asymptotic-complexity

我知道在复杂性方面,O(logn)比O(n)快,后者比O(nlogn)快,后者比O(n2)快。 但是O(n2)和O(n2log),或者O(n2.001)和O(n2log)怎么样:

T1(n)=n^2 + n^2logn

这个功能的大哦和欧米茄是什么?还有什么小哦? 对比:

T2(n)=n^2.001 + n^2logn

现在大喔有什么不同吗? 我无法理解如何将logn与n的幂进行比较。如在,logn约为n ^ 0.000000 ... 1或n ^ 1.000000 ... 1?

2 个答案:

答案 0 :(得分:3)

对于所有O(n^k)O(n^k')

k, k' >= 0k' > k

O(n^2)会比O(n^2*logn)

更快

请注意,您只能忽略常量,不能忽略任何涉及输入大小的内容。

因此,T(n)=n^2 + n^2logn的复杂性将更加严重,即O(n^2logn)

<小时/> 小-OH

松散的小哦是保证上限。是的,它被称为很少,而且它更具限制性。

n^2 = O(n^k) k&gt; = 2 n^2 = o(n^k) k&gt; 2

实际上,Big-Oh占据了大部分风头。

<小时/> 那么T(n)= n^2.001 + n^2logn呢?

我们有n 2.001 = n 2 * n 0.001 和n 2 * log(n)。

要解决这个问题,我们需要弄清楚最终更大,n 0.001 或log(n)。

事实证明,带有k > 0的n k 形式的函数最终将接管log(n) 大{{1} }}

此处的情况相同,因此n(n 2.001 T(n) = O

但实际上,)将大于n 0.001

(10 3300 0.001 &lt; log(10 3300 log(n)足够大的n 在这种情况下将是大约10 3650 ,一个天文数字

再次值得一提, 10 3650 。宇宙中有 10 82 原子。

答案 1 :(得分:1)

  

T(n)=n^2 + n^2logn

     

这个功能的大哦和欧米茄是什么?还有,什么小哦?

引用上一个答案:

  

不要忘记大O符号表示一组。 O(g(n))是一组   所有函数f使f的增长速度不超过g,   正式同样地说存在Cn0这样的   每|f(n)| <= C|g(n)|我们n >= n0。表达方式   f(n) = O(g(n))是说f(n)在集合中的简写   O(g(n))

此外,您可以将大O视为,将小O视为<reference)。所以你更关心的是找到相关的大O而不是小o。在你的情况下,使用=的大theta甚至是合适的。由于n^2 log n支配n^2,所以

确实如此
T1(n)=n^2 + n^2logn = Ө(n^2 logn)

现在是第二部分。 log n增长速度非常慢,即使n^e, e > 0占据主导地位。有趣的是,你甚至可以证明lim n^e/(logn)^k=inf为n无穷大。从这里你可以n^0.001支配log n然后

T2(n)=n^2.001 + n^2logn = Ө(n^2.001).

如果f(n) = Ө(g(n)) f(n) = O(g(n))也是如此,那么回答你的问题:

  • T1(n)=O(n^2 logn)
  • T2(n)=O(n^2.001)