Algorithm O(n^2)对O(n(logn)^2)

Algorithm O(n^2)对O(n(logn)^2),algorithm,math,data-structures,big-o,time-complexity,Algorithm,Math,Data Structures,Big O,Time Complexity,时间复杂度是O(n^2)还是O(n(logn)^2)更好 我知道当我们简化它时,它会变得 O(n) vs O((logn)^2) 和lognn,但是logn^2呢?对于每个常数k渐近log(n)^k 证明很简单,只要记录等式的两边,就可以得到: log(log(n))*k < log(n) log(log(n))*k无穷大[(对数(n)+2log(对数(n))/2log(n)/]=0.5(使用l'Hôpital规则)(http://en.wikipedia.org/wiki/L“H%C

时间复杂度是
O(n^2)
还是
O(n(logn)^2)
更好

我知道当我们简化它时,它会变得

O(n) vs O((logn)^2)

logn
n
,但是
logn^2
呢?

对于每个常数
k
渐近
log(n)^k

证明很简单,只要记录等式的两边,就可以得到:

log(log(n))*k < log(n)
log(log(n))*k
很容易看出,渐近地,这是正确的


语义注释:假设这里
log(n)^k==log(n)*log(n)*…*log(n)(k次)
和NOT
log(log(…log(n)))…(k次)
,因为有时也会使用它。

O(n(logn)^2)对于大n更好(更快)

从两侧取原木:

对数(n^2)=2log(n)

Log(n(logn)^2)=Log(n)+2log(Log(n))=Log(n)+2log(Log(n))

lim n-->无穷大[(对数(n)+2log(对数(n))/2log(n)/]=0.5(使用l'Hôpital规则)(http://en.wikipedia.org/wiki/L“H%C3%b4基本规则)]

(logn)^2
也是
n

例如:

 n = 5
 log n = 0.6989....
 (log n)^ 2 = 0.4885..
您可以看到,(长n)^2进一步减少

即使你取了更大的数值,比如100000000,那么

   log n = 9
   (log n)^ 2 = 81

远远小于
n

n对于n小于0.49的值,它仅小于(对数n)2

因此,一般来说,(log n)2对于较大的n

但由于这些O(something)-符号总是省略常量因子,在您的情况下,可能无法确定哪种算法更好

下面是一张图表:

(蓝线为n,绿线为(对数n)2

请注意,n的小值的差异并没有那么大,可能很容易被未包含在big-O表示法中的常数因子相形见绌

但是对于大的n(log n)2轻而易举地获胜:

(Log n)^2更好,因为如果按exp m对n进行变量更改,那么m^2比exp m更好

O(n^2)与O(n*Log(n)^2)
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
O(n)对O(log(n)^2)(除以n) O(sqrt(n))与O(log(n))(平方根) 多项式与对数

对数获胜。

log(100)n==5
是一个糟糕的例子。试试一百万。对数n=13.8155,它的平方是190.8683。请记住,O(N的某些函数)处理的是N的大值。@amit我在示例中使用了偶数。我已经在更新答案了。@cHao我已经用了一个更大的数字,我认为这已经足够好了。我相信OP在(log(n))^2之后,而不是log(n^2)你是对的:log(n(log(n)^2)=log(n)+log(log(n)^2)=log(n)+2(log(log(n))
注意,对于微小的n值,绿线是如何向上延伸到无穷远的。
渐近性不是关于某个事物是否向无穷远发展,而是关于它向无穷远发展的速度。
log(n)^2
也向无穷远发展。@phant0m我想指出的是
(log n)^2
对于n的小值也可以无穷大,而不仅仅是大值。但这更像是一个纯粹的数学观察,因为n通常不小于1……我将去掉这条线。它实际上没有添加任何有用的东西。。。