log(n!Θ(n・log(n)))==.
nで上限を表示する必要があるというヒントが与えられましたnそして下限を(n/ 2)で表示します(n/ 2)。これは私にはそれほど直感的ではないようです。なぜそうなるのでしょうか?私は間違いなく変換する方法を見ることができますnn to n・log(n)(つまり、方程式の両側を記録します)が、それは一種の逆方向の働きです。
この問題に取り組むための正しいアプローチは何でしょうか?再帰ツリーを描画する必要がありますか?これについて再帰的なものは何もないので、それはありそうなアプローチとは思えません。
覚えておいて
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)
これは非常に古い質問であり、回答は受け入れられていますが、これらの回答はいずれも、ヒントで提案されているアプローチを実際に使用していません。
これは非常に単純な引数です。
n!
(= 1 * 2 * 3 * ... * n)は、それぞれn
以下のn
数の積です。したがって、n
に等しいすべてのn
数の積よりも小さくなります。すなわち、n^n
。
n/2
プロダクトの数字の半分-すなわちそれらのn!
-はn/2
以上です。したがって、それらの積は、n/2
に等しいすべてのn/2
数の積よりも大きくなります。つまり、(n/2)^(n/2)
。
全体をログに記録して、結果を確立します。
下限については、
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)
ミック・シャープがあなたを残した場所であなたをさらに助けます:
導出は非常に簡単です: 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と考えてください。
おかげで、私はあなたの答えが説得力があると感じましたが、私の場合は、Θプロパティを使用しなければなりません:
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
これは役立つかもしれません:
eln(x) = x
そして
(lm)n = lm * n
http://en.wikipedia.org/wiki/Stirling%27s_approximation スターリング近似が役立つ場合があります。 10 ^ 10以上のオーダーの膨大な数に関連する階乗の問題を処理するのに非常に役立ちます。