n * log n和n / log n对多项式运行时间


14

我知道Θ n log n 快,但比Θ n / log n 慢。我很难理解的是如何将Θ n log n Θ n / log n Θ n f)进行比较,其中0 < f < 1Θ(n)Θ(nlogn)Θ(n/logn)Θ(nlogn)Θ(n/logn)Θ(nf)0<f<1

例如,我们如何决定Θ ñ 2 / 3Θ ñ 1 / 3Θ(n/logn)Θ(n2/3)Θ(n1/3)

在这种情况下,我想提供一些指导。谢谢。

Answers:



9

2 n的倒数。正如 2 n的增长快于任何多项式 n k的增长而不论有限 k的大小如何, log n的增长速度要慢于任何多项式函数 n k的增长,而不管非零正 k的大小如何。logn2n2nnkklognnkk

n/lognnkk<1n/lognn/n1k

n1k>lognnn/logn>nkk<1n


3

对于许多算法,有时会出现常数不同的情况,导致数据大小较小时一个或多个常数变快或变慢,并且由于算法复杂性而排序不那么合理。

话虽如此,如果我们仅考虑超大数据大小,即。其中一个最终赢了,那么O(n^f)是不是快O(n/log n)0 < f < 1

算法复杂度的很大一部分是确定哪种算法最终更快,因此通常知道O(n^f)O(n/log n)for 更快0 < f < 1

一个通用规则是,log nn^f任何一个乘(或除)相比,乘(或除)最终将可以忽略不计f > 0

为了更清楚地说明这一点,让我们考虑随着n的增加会发生什么。

   n       n / log n         n^(1/2)
   2        n/ 1              ?
   4        n/ 2             n/ 2
   8        n/ 3              ?
  16        n/ 4             n/ 4
  64        n/ 6             n/ 8
 256        n/ 8             n/16
1024        n/10             n/32

注意哪个下降更快?这是n^f专栏。

即使f接近1,该n^f列的启动也会变慢,但是当n翻倍时,分母的变化速率会加快,而该n/log n列的分母似乎会以恒定的速率变化。

让我们在图形上绘制一个特殊情况

在此处输入图片说明 在此处输入图片说明

资料来源:Wolfram Alpha

我所选择O(n^k),使得k很接近1(处0.9)。我还选择了常量,因此起初O(n^k)速度较慢。但是,请注意,它最终最终“获胜”,并且花费的时间少于O(n/log n)


那n / log n呢?

那是一个错字,这就是我一开始的意思。无论如何,我添加了一个更合适的图形,该图形显示出n^k最终速度更快,即使选择了常数,使其最初速度也较慢。

3

nfnn1fn2/3=n/n1/3

nlognvs.nn1f.

lognnεε>0


1

比较运行时间时,使用大的n值进行比较总是有帮助的。对我来说,这有助于建立关于哪个功能较慢的直觉

在您的情况下,请考虑n = 10 ^ 10和a = .5

O(n/logn) = O(10^10/10) = O(10^9)
O(n^1/2) = O(10^10^.5) = O(10^5)

因此,O(n ^ a)比O(n / logn)快,当0 <a <1时,我只使用了一个值,但是,您可以使用多个值来构建关于函数的直觉


1
不要写O(10^9),但是尝试一些数字来建立直觉的要点是正确的。

失败。这是不正确的。您替换了单个n常数,该常数可能有偏差。如果选择不同的常量,则可以使任何算法看起来更好。大O表示法用于确定从长远来看会更快的趋势。为此,即使n较小时,它必须较慢,即使n较大,它也应显示为更快。

谢谢。加了多个值并考虑了更大的数字

应该注意的是,仅仅因为对于某些常数a的f(a)> g(a),并不一定意味着O(f(x))> O(g(x))。这对于建立直觉很有用,但不足以构成严格的证明。为了证明这种关系成立,必须证明这对所有大n都是正确的,而不仅仅是一个大n。同样,您必须证明它为正度<1的所有多项式是真实的

1

fg

nα1(logn)α2(loglogn)α3nβ1(logn)β2(loglogn)β3(α1,α2,α3)<(β1,β2,β3)

(2,10)<(3,5)(2,10)>(2,5)

应用于您的示例:

O(n/logn)(1,1,0)

O(n2/3)(2/3,0,0)

O(n1/3)(1/3,0,0)

(1/3,0,0)<(2/3,0,0)<(1,1,0)O(n1/3)O(n2/3)O(n/logn)

您可能会说:n的幂支配log的幂,而log的幂支配log。

资料来源:《具体数学》,第1页。441

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.