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次)
和NOTlog(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……我将去掉这条线。它实际上没有添加任何有用的东西。。。