是log(n!)=Θ(n·log(n))?

时间:2010-01-19 17:15:35

标签: algorithm math recursion complexity-theory big-o

我要表明日志( n !)=Θ( n ·log( n ))

提示我应该用 n n 显示上限并显示下限 n / 2) n / 2) 。这对我来说似乎并不那么直观。那为什么会这样?我绝对可以看到如何将 n n 转换为 n log( n (即记录等式的两边),但那是倒退的。

解决这个问题的正确方法是什么?我应该绘制递归树吗?关于这一点没有任何递归,所以这似乎不是一种可能的方法..

9 个答案:

答案 0 :(得分:263)

请记住

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) 

答案 1 :(得分:36)

我意识到这是一个非常古老的问题,并且已经接受了答案,但这些答案实际上并没有使用提示建议的方法。

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

n!(= 1 * 2 * 3 * ... * n)是n个数字的乘积,每个数字小于或等于n。因此,它小于n个数字的乘积,均等于n;即,n^n

n/2产品中的一半数字(即n!)大于或等于n/2。因此,他们的产品大于n/2数字的乘积,均等于n/2;即(n/2)^(n/2)

记录整个日志以确定结果。

答案 2 :(得分:11)

请参阅Stirling's Approximation

  

ln(n!)= n * ln(n) - n + O(ln(n))

其中最后两个术语不如第一个术语重要。

答案 3 :(得分:6)

对于下限,

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!)&gt; =(1/2)(n lg n - 1)

结合两个界限:

1/2(n lg n - 1)&lt; = lg(n!)&lt; = n lg n

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

因此lg(n!)= Theta(n lg n)

答案 4 :(得分:5)

enter image description here

抱歉,我不知道如何在stackoverflow上使用LaTeX语法..

答案 5 :(得分:3)

帮助你进一步,Mick Sharpe离开你的地方:

它的派生很简单: 见http://en.wikipedia.org/wiki/Logarithm - &gt;群论

  

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

将n视为无限大。什么是无限减一?还是减去两个?等

  

log(inf)+ log(inf)+ log(inf)+ ... = inf * log(inf)

然后将 inf 视为n。

答案 6 :(得分:2)

谢谢,我发现你的答案令人信服但在我的情况下,我必须使用Θ属性:

log(n!) = Θ(n·log n) =>  log(n!) = O(n log n) and log(n!) = Ω(n log n)

验证我发现此网站的问题,您已解释了所有流程:http://www.mcs.sdsmt.edu/ecorwin/cs372/handouts/theta_n_factorial.htm

答案 7 :(得分:1)

这可能会有所帮助:

eln(x) = x

(lm)n = lm*n

答案 8 :(得分:0)

http://en.wikipedia.org/wiki/Stirling%27s_approximation 斯特林近似可能会对你有所帮助。这对于处理与10 ^ 10及以上数量级的大量数相关的因子问题非常有帮助。

enter image description here