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))?

http://stackoverflow.com/questions/2095395/is-logn-nlogn

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章