web-dev-qa-db-ja.com

log(n!)=Θ(n・log(n))ですか?

log(nΘ(n・log(n)))==.

nで上限を表示する必要があるというヒントが与えられましたnそして下限をn/ 2)で表示しますn/ 2)。これは私にはそれほど直感的ではないようです。なぜそうなるのでしょうか?私は間違いなく変換する方法を見ることができますnn to n・log(n(つまり、方程式の両側を記録します)が、それは一種の逆方向の働きです。

この問題に取り組むための正しいアプローチは何でしょうか?再帰ツリーを描画する必要がありますか?これについて再帰的なものは何もないので、それはありそうなアプローチとは思えません。

190
Mark

覚えておいて

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) 
263
Mick

これは非常に古い質問であり、回答は受け入れられていますが、これらの回答はいずれも、ヒントで提案されているアプローチを実際に使用していません。

これは非常に単純な引数です。

n!(= 1 * 2 * 3 * ... * n)は、それぞれn以下のn数の積です。したがって、nに等しいすべてのn数の積よりも小さくなります。すなわち、n^n

n/2プロダクトの数字の半分-すなわちそれらのn!-はn/2以上です。したがって、それらの積は、n/2に等しいすべてのn/2数の積よりも大きくなります。つまり、(n/2)^(n/2)

全体をログに記録して、結果を確立します。

36
Nemo

スターリングの近似 を参照してください:

ln(n!)= n * ln(n)-n + O(ln(n))

ここで、最後の2つの用語は最初の用語よりも重要度が低くなります。

11
dsimcha

下限については、

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!)> =(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)

6

enter image description here

申し訳ありませんが、stackoverflowでLaTeX構文を使用する方法がわかりません。

5
Samuel

ミック・シャープがあなたを残した場所であなたをさらに助けます:

導出は非常に簡単です: http://en.wikipedia.org/wiki/Logarithm -> Group Theoryを参照してください

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

Nを無限大と考えてください。無限マイナス1とは何ですか?またはマイナス2?等.

log(inf)+ log(inf)+ log(inf)+ ... = inf * log(inf)

そして、infをnと考えてください。

3
Pindatjuh

おかげで、私はあなたの答えが説得力があると感じましたが、私の場合は、Θプロパティを使用しなければなりません:

log(n!) = Θ(n·log n) =>  log(n!) = O(n log n) and log(n!) = Ω(n log n)

問題を検証するために、すべてのプロセスが説明されているこのWebを見つけました。 http://www.mcs.sdsmt.edu/ecorwin/cs372/handouts/theta_n_factorial.htm

2
WyrmxD

これは役立つかもしれません:

 eln(x) = x 

そして

(lmn = lm * n
1
Anycorn

http://en.wikipedia.org/wiki/Stirling%27s_approximation スターリング近似が役立つ場合があります。 10 ^ 10以上のオーダーの膨大な数に関連する階乗の問題を処理するのに非常に役立ちます。

enter image description here

0
user302520