我要证明log(n!)=Θ(n ·log(n))。
提示我应该用n n表示上限,而用(n / 2)(n / 2)表示下限。在我看来,这似乎并不那么直观。为什么会这样呢?我绝对可以看到如何将n n转换为n ·log(n)(即,记录方程的两边),但这有点倒退。
解决这个问题的正确方法是什么?我应该画递归树吗?对此没有任何递归,因此这似乎不是一种可行的方法。
我要证明log(n!)=Θ(n ·log(n))。
提示我应该用n n表示上限,而用(n / 2)(n / 2)表示下限。在我看来,这似乎并不那么直观。为什么会这样呢?我绝对可以看到如何将n n转换为n ·log(n)(即,记录方程的两边),但这有点倒退。
解决这个问题的正确方法是什么?我应该画递归树吗?对此没有任何递归,因此这似乎不是一种可行的方法。
Answers:
请记住
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)
log(n/2) + log(n/2 + 1) + ... + log(n - 1) + log(n)
占条款的一半log(n!)
)。实际上,我刚刚阅读了问题,并看到了问题中的线索。基本上,(n/2)^(n/2) <= n! <= n^n
=> log((n/2)^(n/2))<=log(n!)<=log(n^n)
=>Θ(n/2 * log(n/2))<=log(n!)<=Θ(n*log(n))
对于下限,
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(n lg n-1)<= lg(n!)<= n lg n
通过选择大于(1/2)的下界常数,我们可以补偿括号内的-1。
因此lg(n!)= Theta(n lg n)
Mick Sharpe离开您的地方进一步为您提供帮助:
它的推导非常简单:请参阅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 无限大。什么是无限减一?或减两个?等等
log(inf)+ log(inf)+ log(inf)+ ... = inf * log(inf)
然后将inf视为n。
谢谢,我发现您的回答令人信服,但就我而言,我必须使用Θ属性:
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
这可能会有所帮助:
e ln(x) = x
和
(l m)n = l m * n
http://en.wikipedia.org/wiki/Stirling%27s_approximation 斯特林近似值可能会对您有所帮助。这对于处理与数量级为10 ^ 10及以上的阶乘有关的阶乘问题确实很有帮助。