我知道在复杂性方面,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?
答案 0 :(得分:3)
O(n^k)
和O(n^k')
, k, k' >= 0
比k' > 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
, 正式同样地说存在C
和n0
这样的 每|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)