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

         因为可以容易地证明出N^N是N!的一个上界,(N/2)^(N/2)是N!的下界。 因此可以推导出"log(n!) = Θ(n·log(n))"(省略log底,这里认为底为2吧,为10也不影响等式)。 写的太粗糙了,严谨的证明不怎么会写了,下面的推导过程可以帮助简单理解一下就行。

  已知:lim( (n/2)^(n/2) )  < lim( n! )  < lim (n^n);//在后面有简单说明

  所以:lim( log( (n/2)^(n/2) ) ) < lim( log(n!) ) < lim( log(n^n) ) 

     log( (n/2)^(n/2) )  

=  n/2 * log(n/2)  

= n/2 * (logn - log2) 

       去掉低阶的log2,得到:lim( log( (n/2)^(n/2) )  ) = lim (n/2 * logn),

       因此,  lim (0.5 * nlogn) < lim( log(n!) ) < lim (nlogn) 

       最终得到:log(n!) = Θ(n·log(n))

        哎,为什么要证明这个呢? 因为前几天想到一个排序算法,简单推算得到算法复杂度是O(log(N!)),顿时以为发现了新大陆。但还是记得算法书上说基于比较的排序算法,复杂度的下界为nlg(n)。 感觉上N!比N^N小,就以为log(n!)比nlog(n)好很多。 最终结果当然是,我的心又凉下来了。。。 新大陆没那么容易发现,还是要踏实点。不过还是可以大胆假设的,但还要小心求证:-)

----------------------------------------------------------------------------------

关于“(N/2)^(N/2)是N!的下界”,可以通过简单的举例说明:

当N=4, N!= 1 * 2 * 3 * 4 = 24, 

   (N/2)^(N/2) = 2 * 2 = 4,

   (1*4) * (2*3) > 2*2;

当N=6,N! =  1 * 2 * 3 * 4 * 5  * 6 = 720,

   (N/2)^(N/2) =  3 * 3 * 3 = 27,

   (1*6) * (2*5) * (3*4) > 3 * 3 *3;

当N=8,N! =  1 * 2 * 3 * 4 * 5  * 6 * 7 * 8 = 40320,

   (N/2)^(N/2) =  4 * 4 * 4 * 4 = 256

   (1*8) * (2*7) * (3*6) * (4*5) > 4 * 4 * 4 * 4

---------------------------------------------------------------------------------------

参考:

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

algorithm - Is log(n!) = Θ(n·log(n))? - Stack Overflow
 

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

piaopiaolanghua

感谢鼓励,再接再厉!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值