【发布时间】:2012-11-22 12:50:16
【问题描述】:
时间复杂度是O(n^2) 还是O (n(logn)^2) 更好?
我知道当我们简化它时,它变成了
O(n) vs O((logn)^2)
还有logn n,但是logn^2呢?
【问题讨论】:
标签: algorithm math data-structures big-o time-complexity
时间复杂度是O(n^2) 还是O (n(logn)^2) 更好?
我知道当我们简化它时,它变成了
O(n) vs O((logn)^2)
还有logn n,但是logn^2呢?
【问题讨论】:
标签: algorithm math data-structures big-o time-complexity
对于每个常数 k 渐近 log(n)^k < n。
证明很简单,对等式两边都做log,你会得到:
log(log(n))*k < log(n)
很容易看出,渐近,这是正确的。
语义说明:假设这里是 log(n)^k == log(n) * log(n) * ... * log(n) (k times) 而不是 log(log(log(...log(n)))..) (k times),因为它有时也被使用。
【讨论】:
O(n(logn)^2) 对于较大的 n 更好(更快)!
从双方获取日志:
Log(n^2)=2log(n)
Log(n(logn)^2)=Log(n)+2log(Log(n))=Log(n)+2log(Log(n))
lim n--> 无穷大 [(Log(n)+2log(Log(n)))/2log(n)/]=0.5(使用 l'Hôpital 规则)(http://en.wikipedia.org /wiki/L'H%C3%B4pital's_rule)]
【讨论】:
(logn)^2 也是 n。
举个例子:
n = 5
log n = 0.6989....
(log n)^ 2 = 0.4885..
可以看到,(long n)^2 进一步缩小了。
即使你取更大的 n 值,例如100,000,000 ,然后
log n = 9
(log n)^ 2 = 81
远远小于n。
【讨论】:
n 仅小于 (log n)2强> 小于 0.49...
所以一般 (log n)2 对于较大的 n...
但由于这些 O(something) 符号总是忽略常数因素,在您的情况下,可能无法确定哪种算法更好。 .
这是一个图表:
(蓝线是n,绿线是(logn)2)
请注意,n 的小值的差异如何并没有那么大,并且可能很容易被未包含在 Big-O 表示法中的常数因子相形见绌。
但对于较大的 n,(log n)2 胜出:
【讨论】:
Notice how the green line shoots up to infinity for tiny values of n asymptotics 不是关于是否某事物会走向无穷大,而是关于它以多快的速度接近无穷大。 log(n)^2 也进入无穷大。
(log n)^2 对于 n 的小值也趋于无穷大,而不仅仅是大值。但这更多的是纯粹的数学观察,因为无论如何 n 通常不小于 1...我将摆脱这条线。它并没有真正添加任何有用的东西......
(Log n)^2 更好,因为如果您通过 exp m 对 n 进行变量更改,则 m^2 比 exp m 更好
【讨论】:
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
对数获胜。
【讨论】: