3 回答

TA貢獻1880條經驗 獲得超4個贊
記住
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)

TA貢獻1839條經驗 獲得超15個贊
我意識到這是一個非常老的問題,答案是可以接受的,但是這些答案實際上都沒有使用提示所建議的方法。
這是一個非常簡單的參數:
n!
(= 1 * 2 * 3 * ... * n)是n
每個均小于或等于的數字的乘積n
。因此它小于n
全部等于的數字的乘積n
; 即n^n
。
產品中一半的數字(即n/2
其中的數字)n!
大于或等于n/2
。因此他們的乘積大于n/2
全部等于的數字的乘積n/2
; 即(n/2)^(n/2)
。
全面記錄日志以確定結果。

TA貢獻1906條經驗 獲得超3個贊
對于下限,
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?。?gt; =(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)
添加回答
舉報