log(n!)=Ω(n * log(n))怎么样?

时间:2014-02-27 10:15:13

标签: algorithm math big-o

我知道

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

 n*log(n)= log(n) + log(n) + .... + log(n) or just adding log(n)'s  n times. 

我可以将n * log(n)乘以哪个常数使其小于log(n!)?

我读了一些关于n / 2 * log(n / 2)的解决方案。那是什么常数?半?

一个解决方案就是从这里开始。 Is log(n!) = Θ(n·log(n))?

如果C = 1/2,那么它不仅仅是(n / 2)* log(n)吗?日志中的n如何受到影响或为什么n突然变为n / 2?

我知道log(a / b)= log a - log b的日志规则。这条规则有帮助吗?

3 个答案:

答案 0 :(得分:2)

log(n!) = log(1) + ... + log(n) >= log(n/2) + log(n/2+1) + ... + log(n)
>= n/2*log(n/2) = n/2 *log(n) - n/2*log(2) >= (*) n/2 log(n) - n/4 log(n) 
= n/4 log(n) = 1/4 nlog(n) 

(*)是因为n(n> N,对于某些常数N)n/2log(2) < n/4log(n)的'足够高'值,所以我们减少'更大'元素 - 这导致更低的结果。

所以,我们得到了log(n!) >= 1/4*nlog(n) - 它根据定义Omega(nlogn)提供了它c=1/4

关于第一部分,我们如何进入log(n/2) + log(n/2+1) + ... +log(n)

log(1) + ... + log(n) >= log(1) + ... + log(n) - log(1) - log(2) - ... - log(n/2-1) = 
  = log(n/2) + log(n/2+1) + ... + log(n)                      

答案 1 :(得分:0)

这不是一个简单的常数。我认为您正在考虑O(log(n!)) = O(n*log(n))的证明,如果是这种情况,那么您需要使用Sterling's approximation。如果您使用此近似值,则可以显示对于任何值c < 1,应该有一个值N,使得n> = N c * n*log(n) < log(n!)

答案 2 :(得分:0)

通过amit做一个更基本的第一个答案:

考虑n!= 1 * 2 * 3 * ... *(n-1)* n以相反的顺序组合,即

   (n!)^2=(n)*(1*(n-1))*(2*(n-2))*...*((n-1)*1)*(n)

然后每个内部产品允许以下估计

    k*(n-k)>=1*max(k,n-k)>=n/2

和算术几何平均值,或者只是x *(1-x)在0和1中间最大的事实,

    k*(n-k)<=((n-k)+k)/2)^2=(n/2)^2

结合我们得到的一切

    n*(n/2)^(n-1)*n <= (n!)^2 <= n*(n/2)^(2(n-1))*n

并取对数并除以2

    (n+1)/2*log(n/2)+log(2) 
         <= log(n!) 
             <= n*log(n/2)+log(2)

这样下限的前导项为1/2*n*log(n),上限的前导项为n*log(n)