函数增长速度比较:n!与(log n)^n的大小关系及序列正确性验证
函数增长速度比较:n!与(log n)^n的大小关系及序列正确性验证
嗨,很高兴能帮你梳理这个算法分析里的函数增长问题!咱们分两部分来解决:先证明(log n)^(n/2) < n!,再验证你给出的增长序列是否正确。
一、证明(log n)^(n/2) < n!
这里给你两种直观的证明思路,考试里用哪种都可以:
方法1:拆分阶乘下界
对于足够大的n(比如n≥2),我们可以把n!拆分成前半部分和后半部分的乘积:
n! = (1×2×…×⌊n/2⌋) × (⌊n/2⌋+1 × … × n)
后半部分的每一项都大于n/2,而且至少有n/2个这样的项,因此:
n! > (n/2)^(n/2)
接下来只需要证明当n足够大时,n/2 > log n——这显然成立,因为线性函数的增长速度远快于对数函数。由此可得:
(n/2)^(n/2) > (log n)^(n/2)
结合上面两个不等式,就推出了n! > (log n)^(n/2)。
方法2:利用斯特林公式(更严谨的渐近分析)
斯特林公式给出了n!的渐近近似:
n! ~ √(2πn) × (n/e)^n
对两边取自然对数,得到:
ln(n!) ≈ n ln n - n + (1/2)ln(2πn)
再看左边(log n)^(n/2)的对数:
ln((log n)^(n/2)) = (n/2) ln(log n)
现在比较两者的对数增长速度:当n足够大时,n ln n是主导项,它的增长速度远远超过(n/2) ln(log n)(毕竟ln n比ln(log n)快得多)。因此ln(n!)最终会远大于ln((log n)^(n/2)),原不等式成立。
二、验证你的增长序列是否正确
你给出的序列是:
28 < log n^{2020} < 5n^{3/7} < 2{n{1/2}} < (log n)^{n/2} < n! < n^n
咱们逐个分析每个相邻对的增长关系(所有结论都针对n足够大的渐近情况):
- 28 < log n^{2020}:28是常数,
log n^{2020}=2020 log n是对数函数,对数函数最终会超过任何常数,正确。 - log n^{2020} < 5n^{3/7}:对数函数的增长速度慢于任何正次数的多项式,哪怕次数是3/7这种小正数,正确。
- 5n^{3/7} < 2{n{1/2}}:底数大于1的指数函数(这里指数是
√n)增长速度远快于任何多项式,因为√n的增长速度比ln n快,而多项式n^k等价于e^{k ln n},指数函数2^{√n}等价于e^{√n ln2},后者增长更快,正确。 - 2{n{1/2}} < (log n)^{n/2}:两边取对数,左边是
√n × ln2,右边是(n/2) × ln(log n)。当n足够大时,n/2 × ln(log n)的增长速度是线性级别的,远快于√n的亚线性增长,正确。 - (log n)^{n/2} < n!:就是我们刚才证明的结论,正确。
- n! < n^n:n!是1到n的乘积,每个因子都≤n,且当n>1时至少有一个因子小于n,因此乘积严格小于
n^n,正确。
综上,你的整个增长序列在渐近意义下是完全正确的!
备注:内容来源于stack exchange,提问作者Lena67




