我要证明log(n!) = Θ(n·log(n))

给出了一个提示,我应该用nn表示上界,用(n/2)(n/2)表示下界。这对我来说不是那么直观。为什么会这样呢?我可以清楚地看到如何将nn转换为n·log(n)(即方程两边都取对数),但这有点倒过来了。

解决这个问题的正确方法是什么?我要画递归树吗?没有什么递归的,所以这似乎不是一个可能的方法。


当前回答

对不起,我不知道如何在stackoverflow上使用LaTeX语法。

其他回答

我知道这是一个有公认答案的老问题,但这些答案实际上都没有使用暗示所建议的方法。

这是一个非常简单的论证:

n !(= 1*2*3*…*n)是n个小于或等于n的数的乘积,因此它小于n个都等于n的数的乘积;也就是说,n ^ n。

一半的数字,即n/2个,在n!乘积大于或等于n/2。因此它们的乘积大于n/2个数的乘积都等于n/2;例如(n / 2) ^ (n / 2)。

全程记录日志以建立结果。

如果你重新构造这个问题,你可以用微积分来解决它!这个方法最初是通过Arthur Breitman https://twitter.com/ArthurB/status/1436023017725964290向我展示的。

首先,求log(x)从1到n的积分得到n*log(n) -n +1。这证明了一个严格的上界,因为log是单调的,对于每一个点n,从n到n+1对log(n) >log (n) * 1积分。你也可以用log(x-1)来设定下限,对于每一个点n, 1*log(n) >从x=n-1到n对log(x)积分。log(x)从0到n-1的积分是(n-1)*(log(n-1) -1)或者n log(n-1) -n -log(n-1)+1。

这是非常严格的界限!

更进一步,米克·夏普留给你的

它的推导很简单: 参见http://en.wikipedia.org/wiki/Logarithm ->群论

log(n!)=log(n*(n-1)*(n-2)*…* 2*1)=log(n)+log(n-1)+…+ log(2) + log(1)

把n看成无限大。无穷减一是多少?还是- 2 ?等。

日志(inf)+日志(inf)+日志(inf)+…= inf*log(inf)

然后把无穷看做n。

对不起,我不知道如何在stackoverflow上使用LaTeX语法。

对于下界,

lg(n!) = lg(n)+lg(n-1)+...+lg(n/2)+...+lg2+lg1
       >= lg(n/2)+lg(n/2)+...+lg(n/2)+ ((n-1)/2) lg 2 (leave last term lg1(=0); replace first n/2 terms as lg(n/2); replace last (n-1)/2 terms as lg2 which will make cancellation easier later)
       = n/2 lg(n/2) + (n/2) lg 2 - 1/2 lg 2
       = n/2 lg n - (n/2)(lg 2) + n/2 - 1/2
       = n/2 lg n - 1/2

lg(n!) >= (1/2) (n lg n - 1)

结合两个边界:

1/2 (nlgn - 1) <= lg(n!) <= nlgn

通过选择大于(1/2)的下界常数,我们可以补偿括号内的-1。

因此lk(n!) = (nlgn)