O(n ^ 3)真的比O(2 ^ n)更有效吗?

时间:2017-08-06 02:04:52

标签: algorithm big-o asymptotic-complexity

我的算法类的作业声称O(n 3 )比O(2 n )更有效。

当我将这些函数放入图形计算器时,对于非常大的n(从n = 982左右开始),f(x)= 2 x 似乎始终更有效。

考虑到对于函数f(n)= O(g(n)),对于大于某些n 0 的所有n,它必须更小,这不意味着从n = 982我们可以说O(2 n )效率更高?

2 个答案:

答案 0 :(得分:9)

2^n的增长速度比n^3快得多。也许你已经在计算器中输入了错误的值或类似的东西。另请注意,效率更高意味着更短的时间,这意味着y-axis上的更低的值

让我向您展示一些正确的图表(使用Wolfram Alpha):

early course of 2^n and n^3

首先 2^n 更小(但只是一个小范围),之后你可以看到{{1>超越它。

在此交叉点之后,情况永远不会再次发生变化,2^n仍然非常大于2^n。这也适用于您分析的范围,因此> 982 ,如下图所示(n^3的情节靠近n^3):

2^n extremely greater than n^3

另请注意,在 Big-O-Notation 中,我们总是根据功能的增长来比较功能。这就是为什么像x-axis这样的东西不包含函数O(n^3)而是f : f(x) <= n^3,其中f : f(x) <= C * n^3是一个任意常量,它可能很大,可能很小。这说明了比较中的增长因子。还要注意,允许条件不适用于有限数量的C但是条件必须存在一些绑定x,因此对于每个x'。< / p>

将此解释与Wikipedia的完整数学定义进行比较,其中x > x'Ckxn为{{ 1}}:

definition of Big-O

如果设置为x',则n_0定义为f(n)

答案 1 :(得分:2)

你混淆O(2 n )和2 n 。 O(2 n )实际上是C * 2 n ,其中C是任意选择的正常数。同样,O(n 3 )是D * n 3 ,其中D是另一个任意选择的正常数。声明&#34; O(n 3 )比O(2 n )&#34;更有效。意味着,给定任何固定的C和D,总是可以找到这样的n 0 ,对于任何n> = n 0 ,D * n 3  &LT; C * 2 名词