我正在尝试找出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!)
答案 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个方程的图。
使用以下代码,我能够绘制所有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)
答案 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)