我要证明log(n!) = Θ(n·log(n))
给出了一个提示,我应该用nn表示上界,用(n/2)(n/2)表示下界。这对我来说不是那么直观。为什么会这样呢?我可以清楚地看到如何将nn转换为n·log(n)(即方程两边都取对数),但这有点倒过来了。
解决这个问题的正确方法是什么?我要画递归树吗?没有什么递归的,所以这似乎不是一个可能的方法。
我要证明log(n!) = Θ(n·log(n))
给出了一个提示,我应该用nn表示上界,用(n/2)(n/2)表示下界。这对我来说不是那么直观。为什么会这样呢?我可以清楚地看到如何将nn转换为n·log(n)(即方程两边都取对数),但这有点倒过来了。
解决这个问题的正确方法是什么?我要画递归树吗?没有什么递归的,所以这似乎不是一个可能的方法。
当前回答
参见斯特林近似:
-不,不,不。
后两项的重要性小于前一项。
其他回答
记住,
log(n!) = log(1) + log(2) + ... + log(n-1) + log(n)
你可以通过
log(1) + log(2) + ... + log(n) <= log(n) + log(n) + ... + log(n)
= n*log(n)
你可以通过类似的方法得到下界在丢掉和的前半部分之后
log(1) + ... + log(n/2) + ... + log(n) >= log(n/2) + ... + log(n)
= log(n/2) + log(n/2+1) + ... + log(n-1) + log(n)
>= log(n/2) + ... + log(n/2)
= n/2 * log(n/2)
这可能会有帮助:
eln(x) = x
and
(lm)n = lm*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)