证明:指数函数和阶乘谁增长的更快?

文章讨论了阶乘函数在增长速度上优于指数函数的现象,指出不论底数大小,指数函数无法赶上阶乘。作者还提到所有时间复杂度可转化为指数级,但在实际应用中,处理器架构限制了遇到极其复杂问题的可能性,数据结构与算法分析中的实例如排序和递归并未超出多项式时间范围。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先说结论,阶乘增长速度比指数函数快,也就是说:

\lim_{n \to \infty }\frac{a^n}{n!}=0

可以用简单的指数函数y=4^x的图形和阶乘函数图形做一个对比,可以发现,在自变量取值比较小的时候,指数函数(红色)是大于阶乘的,但是当自变量取值逐渐增加时,阶乘函数后来居上,增长率和数值上远远大于了指数函数。

这个规律是不是对所有整数为底的指数函数都适用呢?不管底数多大,指数函数最终追不上阶乘函数,根据本文开头的结论,答案是肯定的。这里证明以一下:

\boldsymbol{0\leq \frac{a^n}{n!}=\frac{a\cdot a\cdot a \cdot a \cdot \cdot a }{1\cdot 2 \cdot 3 \cdot 4 \cdot \cdot n}=\frac{a\cdot a\cdot a \cdot a \cdot \cdot a }{1\cdot 2 \cdot 3 \cdot 4 \cdot \cdot a}\times \frac{a\cdot a\cdot a \cdot a \cdot \cdot a }{(a+1)\cdot (a+2) \cdot (a+3) \cdot (a+4) \cdot \cdot n}=M\cdot \frac{a\cdot a\cdot a \cdot a \cdot \cdot a }{(a+1)\cdot (a+2) \cdot (a+3) \cdot (a+4) \cdot \cdot n}=}

\boldsymbol{M\cdot \frac{a\cdot a\cdot a \cdot a \cdot \cdot a }{(a+1)\cdot (a+2) \cdot (a+3) \cdot (a+4) \cdot \cdot n}=M\cdot \frac{a}{a+1}\cdot \frac{a}{a+2}\cdot \cdot \frac{a}{n}\leq M\cdot \frac{a}{n}=0}

所以:

\boldsymbol{0\leq \frac{a^n}{n!}\leq 0}

根据夹逼准则:

\boldsymbol{\lim_{n \to \infty }\frac{a^n}{n!}=0}

结论成立。

所有的O(a^n)时间复杂度都可以转换成指数O(2^n)的复杂度,但是O(n!)是一个远大于指数复杂度的算法复杂度,码农所能遇到的最复杂的实际问题应该不会比O(n!)更复杂了,在当今的处理器架构上不具有实际意义。 可能计算性分析中有理论价值,比如TSP旅行商问题的时间复杂度就是O(n!),实际工作中一般不与遇到这样复杂的问题,大部分算法都能在多项式时间内计算完成。

斯特林公式

当要为某些极大的n求阶乘时,直接计算的复杂度不可接受。斯特林公式(Stirling's approximation)是一条用来取n的阶乘将近似值的数学公式,它能够将求解阶乘的复杂度降低到对数级。而且,即使在n很小的时候,斯特林公式的取值已经十分准确。斯特林公式用极限表示如下:

\boldsymbol{\lim_{n->+\infty }\frac{n!}{\sqrt{2\pi n}(\frac{n}{e})^n} = 1}

画图表示两个函数,可以看到其曲线基本上重合:

也就是说,对于自然数n,下式成立:

总结

在编程实践中,工程师将多项式时间作为算法可行性的分界线,也就是可以用O(x^k)来表示的复杂度,这里k是常数。指数时间,阶乘时间是垂直的悬崖峭壁,普通人很难征服,而多项式时间虽需攀登,但终可抵达。所以,实践中通常选择一个能够在多项式时间内解决问题的算法。但是否是所有的问题都能找到多项式的复杂度呢?这个问题涉及到数学难题P=NP了,目前尚无结论。


参考文章

数据结构与算法分析(排序,递归,链表)_数据结构的算法分析-CSDN博客


结束

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

papaofdoudou

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值