大O增长层次结构?

时间:2014-09-23 00:49:44

标签: big-o

我正在尝试找出O(sqrt(n))O(n2 log n)适合下面列出的增长层次结构的位置。这一章令人困惑,我迷失在如何解决这个问题上。任何建议将不胜感激。

O(1)
O(log log n)
O(log n)
O(log2 n)
O(n)
O(n log n)
O(n2)
O(n3)
O(2n)
O(n!)

4 个答案:

答案 0 :(得分:4)

首先,第二个,O(n 2 * log 10 n)很容易理解。如果您注意到,n 2 的权重大于log 10 n,因为它以指数方式增长,而log将收敛于x轴上最大数字的位数。因此,该等式将产生大于n 2 但小于n 3 的值。

最后,第一个,O(sqrt(n)),log(n)<所有n的sqrt(n)>这是proof

其他信息

下图是从左到右,从上到下绘制所有12个方程的图。

enter image description here

使用以下代码,我能够绘制所有12个函数。

from matplotlib.pyplot import figure,plot,savefig,subplot,tight_layout,title,text
from numpy import linspace,log10,log2,sqrt
from scipy.misc import factorial

def plotEq(loc, lbl, n, eq):
    subplot(4,3,loc)
    plot(n,eq)
    text(60,.025,r'$\mu=100,\ \sigma=15$')
    title(lbl)

n = linspace(2,100,500)
figure()

plotEq(1, 'log10(log10(n))', n, log10(log10(n)))
plotEq(2, '1', n, n**0)
plotEq(3, 'log10(n)', n, log10(n))
plotEq(4, 'log2(n)', n, log2(n))
plotEq(5, 'sqrt(n)', n, sqrt(n)) # Here
plotEq(6, 'n', n, n)
plotEq(7, 'n*log10(n)', n, n*log10(n))
plotEq(8, 'n**2', n, n**2)
plotEq(9, '(n**2)*log10(n)', n, (n**2)*log10(n)) # Here
plotEq(10, 'n**3', n, n**3)
plotEq(11, '2**n', n, 2**n)
plotEq(12, 'n!', n, factorial(n))

tight_layout()
savefig("plot_subplots.png")

答案 1 :(得分:2)

  1. O(1)
  2. O(日志(日志(N)))
  3. O(log n)
  4. O(log 2 n)
  5. O(sqrt(n))(由于sqrt(n)= n 1/2
  6. O(n)的
  7. O(n log n)
  8. O(N²)
  9. O(n²logn)(n²+任何大于n².logn小于n 1 + 1
  10. O(N 3)
  11. O(2ⁿ)
  12. O(N!)

答案 2 :(得分:0)

  

O(log 2 n)⊂ O(√n)⊂O(n)

O(√n)是O(n 1/2 )。这比O(n)快,但任何对数函数都慢。对数生长缓慢,慢于n的任何正幂,甚至n 0.01 。如果平方对数甚至是raise it to the millionth power都没关系。

  

O(n 2 )⊂ O(n 2 log n)⊂O(n 3

我们知道这一点,因为你可以将公共n 2 分解出来并看到O(1)⊂O(log n)⊂O(n)。

答案 3 :(得分:0)

嗯,O(sqrt(n))肯定小于O(n),对吗? 现在让我们考虑O(log2 n)是大于还是小于O(sqrt(n))。 如果您感到困惑,只需在n中放入一个非常大的整数并计算它们的值。 例如,当n是1024时,log2 n = 10,并且sqrt(n)= 32.因此,O(log2 n)<0。 O(SQRT(n))的

O(log2 n) < O(sqrt(n)) < O(n)

现在,O(n ^ 2 log n)明显小于O(n ^ 3),因为O(log n)<0。上)。 此外,由于log n大于1,因此O(n ^ 2 log n)大于O(n ^ 2)。

因此,

O(n^2) < O(n^2 log n) < O(n^3)