我正在尝试解决这个递归问题:
T(n) = 3 T(n/2) + n lg n ..
我得出的结论是它属于主定理第二种情况,因为n lg n是O(n^2)
但是在参考解决方案后,我注意到他们有以下解决方案:
解决方案表明n lg n = O ( n ^(lg 3 - e)),其中e介于0和0.58之间
所以这意味着n lg n 是O(n) .. 这正确吗?我有什么遗漏吗?
nlgn不是O(n^2)吗?
我正在尝试解决这个递归问题:
T(n) = 3 T(n/2) + n lg n ..
我得出的结论是它属于主定理第二种情况,因为n lg n是O(n^2)
但是在参考解决方案后,我注意到他们有以下解决方案:
解决方案表明n lg n = O ( n ^(lg 3 - e)),其中e介于0和0.58之间
所以这意味着n lg n 是O(n) .. 这正确吗?我有什么遗漏吗?
nlgn不是O(n^2)吗?
这将更好地解释事情
n*log(n)
不是O(n^2)
。它被称为准线性,增长速度比O(n^2)
慢得多。实际上,n*log(n)
比多项式更小。
换句话说:
O(n*log(n)) < O(n^k)
当 k > 1
时:
以你的例子为例:
3*T(2n) -> O(n^1.585)
由于 O(n^1.585)
是多项式且支配 O(n*log(n))
,因此后者的项会被忽略,因此最终的复杂度只是 O(n^1.585)
。
nlg3不是O(n)。它的时间复杂度比O(n)更高...实际上,任何大于1的n指数都会导致时间复杂度渐进更长。由于lg(3)约为1.58,只要从指数中减去小于0.58的值,它就会渐进地高于O(n)。