Big o O(n^log(n))比O(n!)大吗

Big o O(n^log(n))比O(n!)大吗,big-o,code-complexity,Big O,Code Complexity,n是一个介于1和+无穷大之间的数字,这是为了了解算法的复杂性 我需要看看n^log(n)是否大于n 如果我没弄错你的问题,你是在问n^(logn)在n趋于无穷大的极限内是否大于n!。简短的回答是否定的:在这个极限下,n!大于n^(对数n) 这可以通过使用斯特林近似(例如,参见)来证明,根据该近似,log(n!)与n log(n!)等价(取决于对数基数的预因子)。相比之下,log(n^(log(n)))等于log(n)²。由于n>log(n)表示所有正整数,因此对于n的大值,这会给出log(n!)

n是一个介于1和+无穷大之间的数字,这是为了了解算法的复杂性
我需要看看n^log(n)是否大于n

如果我没弄错你的问题,你是在问n^(logn)在n趋于无穷大的极限内是否大于n!。简短的回答是否定的:在这个极限下,n!大于n^(对数n)

这可以通过使用斯特林近似(例如,参见)来证明,根据该近似,log(n!)与n log(n!)等价(取决于对数基数的预因子)。相比之下,log(n^(log(n)))等于log(n)²。由于n>log(n)表示所有正整数,因此对于n的大值,这会给出log(n!)>log(n^(log(n)),从而得到n!>n^(log(n))

(更正式地说,这意味着n的任何函数都是O(n^(log(n)))也是O(n!),尽管反过来不是真的。如果你感兴趣,你可以在维基百科关于big-O符号()的文章或这些课堂讲稿中找到更多细节:)

这里有一个图表说明了这一点(我为纵轴选择了一个对数刻度,因为n!变得相当大,即使是中等大小的n值):

如您所见,对于n的大值,n!远大于n^(对数n)。 以下是我用于生成绘图的Python代码:

import numpy as np
import matplotlib.pyplot as plt

# maximum value of n
max_n = 100

list_n = range(1, max_n+1)

# array of values of n^(log(n))
# NumPy uses a base-e log
n_exp_log_n = [n**(np.log(n)) for n in list_n]

# array of values of n!
factorial_n = [np.math.factorial(n) for n in list_n]

# plot the results with logarithmic vertical scale
plt.plot(list_n, n_exp_log_n, label='$n^{\log (n)}$')
plt.plot(list_n, factorial_n, label='$n!$')
plt.xlim(1, max_n)
plt.xlabel('$n$')
plt.yscale('log')
plt.legend()
plt.grid()
plt.tight_layout()
plt.show()

如果您的问题是n^(log(n))>n!对于某些正整数为真,答案也是否定的:对于n=1和n,它们相等!>n^(log(n))表示n>1。(形式证明并不困难,但需要更多的代数。)

你的问题到底是什么?仅仅通过尝试一些你可以看到的例子,n!会大得多。N将每个数字相乘,直到n(n=4:1*2*3*4=24),其中log(n)比n小得多(看看图表)。(n=4:log(4)~0.6;4^0.6=2.3)