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


217

私はそれを示すために午前ログを(N!)=Θ(nは・ログ(N))

上限をn nで示し、下限をn / 2)n / 2)で示すべきであるというヒントが与えられました。これは私にはそれほど直感的に思えません。なぜそうなのでしょうか?n nn・log(nに変換する方法(つまり、方程式の両辺をログに記録する方法)は確実にわかりますが、それは一種の逆の作業です。

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


1
「as n->∞」を含めて実際に記述してください
MartW

2
楽しいエクササイズ:同様のトリックを使用して、調和系列1/1 + 1/2 + 1/3 + 1/4 + ...が無限に発散することを示します。
Yoo

10
これはcs.stackexchange.comにあるべきではありませんか?
CodyBugstein 2013年

5
@ CodyBugstein、cs.stackexchange.comは、質問されたときに存在していませんでした
MrMartin

回答:


303

覚えて

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) 

5
これは上限の非常に良い証明です:log(n!)= log(1)+ ... + log(n)<= n log(n)=> log(n!)= O(n log n )。ただし、下限(および結果として大きいテタ)を証明するには、おそらくスターリングの近似が必要になります。
Mehrdad Afshari、2010年

33
下限にはスターリングの近似は必要ありません。log(n!)= log(1)+ ... + log(n)> = log(n / 2)+ ... + log(n)> = n / 2 * log(n / 2)= Omega (n log n)。
キースランドール

2
@キース:まだわかりません。あなた(または誰か)が、「log(n / 2)+ ... + log(n)」の「...」の部分でさらにいくつかの用語を拡張してくれませんか?ありがとう!
j_random_hacker

6
@j_random_hacker:(log(n/2) + log(n/2 + 1) + ... + log(n - 1) + log(n)用語の半分以上log(n!))。実際、私は質問を読んだだけで、手掛かりが質問に記載されているのを見ました。基本的に、(n/2)^(n/2) <= n! <= n^n=> log((n/2)^(n/2))<=log(n!)<=log(n^n)=>Θ(n/2 * log(n/2))<=log(n!)<=Θ(n*log(n))
Mehrdad Afshari、2010年

4
この説明は受け入れられた回答に似ていますが、もう少し詳細があります:mcs.sdsmt.edu/ecorwin/cs372/handouts/theta_n_factorial.htm
gayavat

40

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

それはかなり単純な議論です:

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

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

結果を確認するために、全体を通してログを取ります。


9
これは実際には受け入れられた回答のログバージョンと同じですが、前ではなく後に対数を取ります。(ただし、より明確にヒントを使用しています)
hugomg

13

ここに画像の説明を入力してください

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


1
これは素晴らしい説明です!これはステップ7まで続きますが、ステップ7とステップ8の間で発生する数学をデコードできません... :-(
Z3d4s

3
Z3d4s @ステップ7において引数が右辺の第1項は支配的な用語とそのログが(N!)従って、n個で近似することができていることを、基本的にログ(N)またはそれがn次であることをログ(N)これは、大きなO表記O(n * log(n))で表されます。
random9

1
@ Z3d4sステップ7〜8の変換でn logn == log(n ^ n)と示されていることと、ここで範囲を示すために、最初の項は常に2番目の項よりも大きいと言うことができ、より大きな値を確認できます。 Big-Oの複雑さを表現するために、私たちは常にすべての支配的な項目を取り上げます。したがって、n lognはbig-O時間に寄与します。
Shiv Prakash


7

下限については、

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)


2
"something"> = n / 2 * lg(n / 2)は、前のコメントの1つで述べたomega(n lg n)と等しくないため、この拡張された派生が必要です。
Vivek Anand Sampath 2015

下限を見つけようとしているので、「(1/2)よりも小さい定数」と表示されます。(1/2)より小さい定数cは、最終的にc n logn <=(1/2)n * logn-(1/2)nとなり、十分に大きなnになります。
マシュー

3

ミック・シャープがあなたを置き去りにした、あなたをさらに助ける:

導出は非常に簡単です。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 と考えます。


2

おかげで、あなたの答えは説得力のあるものでしたが、私の場合は、Θプロパティを使用する必要があります。

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


1

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

e ln(x) = x

そして

(l mn = l m * n

3
実際には、それは間違っています:1 ^(m ^ n)!= 1 ^(m n)でなければなりません(1 ^ m)^ n = 1 ^(m n)
Pindatjuh

上記のコメントで1ではなくLを意味します。
Pindatjuh 2010年

彼は1 ^(m ^ n)と書きませんでした(l ^ m)^ nを書いた
CodyBugstein

1
@CodyBugstein:問題を修正するために行われた編集があり、エラーが履歴に隠されていた数年後のコメント
Ben Voigt

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.