时间复杂度是 O(n^2)
还是 O (n(logn)^2)
更好?
我知道当我们简化它时,它变成了什么。
O(n) vs O((logn)^2)
如果 logn
< n
,那么 logn^2
又是怎样的呢?
时间复杂度是 O(n^2)
还是 O (n(logn)^2)
更好?
我知道当我们简化它时,它变成了什么。
O(n) vs O((logn)^2)
如果 logn
< n
,那么 logn^2
又是怎样的呢?
n只有在小于0.49的n值下才小于(log n)2...
所以一般情况下,对于较大的n,(log n)2更好...
但是由于这些O(something)表示法总是省略常数因子,在您的情况下可能无法确定哪个算法更好...
下面是一张图:
(蓝线是n,绿线是(log n)2)
请注意,对于小的n 值,差异并不是很大,很容易被未包括在Big-O标记中的常数因子所掩盖。
但对于较大的n 值,(log n)2胜出:
对于每个常数 k
,渐近地有log(n)^k < n
。
证明很简单,两侧取对数,即可得到:
log(log(n))*k < log(n)
很容易看出,在渐近意义下,这是正确的。
语义说明:在此假设 log(n)^k == log(n) * log(n) * ... * log(n) (重复k次)
而不是有时也被使用的 log(log(log(...log(n)))..) (重复k次)
。
O(n^2) vs. O(n*log(n)^2)
<=> O(n) vs. O(log(n)^2) (divide by n)
<=> O(sqrt(n)) vs. O(log(n)) (square root)
<=> polynomial vs. logarithmic
对数胜出。
(logn)^2
也小于 n
。
举个例子:
n = 5
log n = 0.6989....
(log n)^ 2 = 0.4885..
log n = 9
(log n)^ 2 = 81
这远远小于n
。
(Log n)^2更好,因为如果你通过变量替换n为exp m,那么m^2比exp m更好。
对于大的n,O(n(logn)^2)更好(更快)!
两边取对数:
Log(n^2)=2log(n)
Log(n(logn)^2)=Log(n)+2log(Log(n))=Log(n)+2log(Log(n))
当n趋近于无穷大时,lim [(Log(n)+2log(Log(n)))/2log(n)/]=0.5(使用l'Hôpital法则)(http://en.wikipedia.org/wiki/L'H%C3%B4pital's_rule)
(log n)^2
也会趋向于无穷大,而不仅仅是大的n值。但这更多是一个纯数学观察,因为通常情况下n不会小于1...我会删除这行。它并没有真正添加任何有用的信息... - Markus A.