因爲可以容易地證明出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
---------------------------------------------------------------------------------------
參考: