哪个函数增长得更快,指数(如2 ^ n,n ^ n,e ^ n等)或阶乘(n!)? Ps:我刚读到某个地方,n!增长速度超过2 ^ n。
答案 0 :(得分:90)
N!最终比具有常数基数(2 ^ n和e ^ n)的指数增长更快,但是n ^ n比n增长更快!因为随着n的增加,基数会增长。
答案 1 :(得分:39)
n! = n * (n-1) * (n-2) * ...
n^n = n * n * n * ...
n^n
中第一个术语后的每个术语都较大,因此n ^ n会增长得更快。
答案 2 :(得分:1)
分数时间算法的渐近运行速度比指数时间算法慢,但尚不清楚何时开始出现差异。例如,对于n=5
和k=10
,5!=120
仍然比10^5=10000
快。为了找出指数时间算法何时开始表现更好,我们必须进行一些快速的数学分析。
我们可以使用斯特林公式:
log_k^(n!) ~ nlog_k^n - nlog_k^e
k^n = n!
log_k^{k^n} = log_k^{n!}
n = log_k^{n!}
n ~ nlog_k^n - nlog_k^e
1 ~ log_k^n - log_k^e
log_k^n - log_k^e - 1 ~ 0
log_k^n - log_k^e - log_k^k ~ 0
log_k^{n/(ek)} ~ 0
n/(ek) ~ 1
n ~ ek
因此,一旦n
的大小几乎是k
的3倍,阶乘时间算法的运行速度将比指数时间算法慢。对于大多数现实情况,我们将使用n
的大值和k
的小值,因此在实践中,我们可以假设阶乘时间算法严格地比指数时间算法差。
答案 3 :(得分:0)
我想向您展示一种更加图形化的方法,以非常容易地证明这一点。我们将使用除法绘制函数图形,这将很容易向我们展示。
让我们使用一个基本且无聊的除法函数来解释除法的性质。
随着增加,对该表达的评估也增加。随着b的减小,对该表达式的评估也随之减小。
使用这种想法,我们可以根据期望增加和减少的情况绘制图表,并比较增加速度更快的情况。
在我们的例子中,我们想知道指数函数的增长是否快于阶乘,反之亦然。我们有两种情况,常数对变量指数与可变阶乘,变量对变量指数与可变阶乘。
用Desmos绘制这些工具的图形(没有从属关系,这只是一个不错的工具),向我们展示了这一点:
尽管起初似乎指数表达增加得更快,但它达到了不再以如此快的速度增长的程度,取而代之的是阶乘表达增加得更快。
尽管起初看起来较慢,但它开始迅速上升超过该点,因此我们可以得出结论,指数的增长必须快于阶乘。
答案 4 :(得分:0)
$$ n! \ approx \ sqrt {2 \ pi n} \ left(\ frac {n} {e} \ right)^ n $$