web-dev-qa-db-ja.com

O(log(n!))およびO(n!)およびスターリング近似とは

O(log(n!))およびO(n!)とは何ですか? O(n log(n))O(n^n)であると思いますか?どうして?

スターリング近似と関係があると思いますが、説明はあまりよくわかりません。

私が間違っている場合、誰かが私を修正できますか(O(log(n!) = O(n log(n))について)?そして、可能であれば数学をより簡単な言葉で?現実には、これがどのように機能するかについてのアイデアが欲しいだけであることを証明する必要はないと思います。

37
Jiew Meng

O(n!)O(n^n)と同等ではありません。 O(n^n)よりも漸近的に小さくなります。

O(log(n!))O(n log(n))と同じです。これを証明する1つの方法を次に示します。

ログルールlog(mn) = log(m) + log(n)を使用すると、次のことがわかります。

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


その証拠 O(log(n!)) ⊆ O(n log(n))

_log(n!) = log(n) + log(n-1) + ... log(2) + log(1)
_

どちらが小さいか:

_log(n) + log(n) + log(n) + log(n) + ... + log(n) = n*log(n)
_

O(log(n!))O(n log(n))のサブセットです


その証拠 O(n log(n)) ⊆ O(log(n!))

_log(n!) = log(n) + log(n-1) + ... log(2) + log(1)
_

これは、すべての_(n-x)_を_n/2_で置き換えた(式の左半分よりも大きい):

_log(n/2) + log(n/2) + ... + log(n/2) = floor(n/2)*log(floor(n/2)) ∈ O(n log(n))
_

したがって、O(n log(n))O(log(n!))のサブセットです。


O(n log(n)) ⊆ O(log(n!)) ⊆ O(n log(n))であるため、同等のbig-Ohクラスです。

68
Paulpro

スターリングの近似により、

log(n!) = n log(n) - n + O(log(n))

Nが大きい場合、右側はn log(n)という用語によって支配されます。つまり、O(log(n!))= O(n log(n))です。

より正式には、 "Big O" の1つの定義は、f(x) = O(g(x)) ifそして場合のみ

lim sup|f(x)/g(x)| < ∞ as x → ∞

スターリングの近似を使用すると、この定義を使用してlog(n!)∈O(n log(n))を示すのは簡単です。

同様の引数がn!に適用されます。スターリング近似の両側の指数を取ることにより、nが大きい場合、n! n ^(n + 1)/ exp(n)のように漸近的に動作します。 n/exp(n)→0はn→∞なので、そのnを結論付けることができます! ∈O(n ^ n)が、O(n!)はO(n ^ n)と同等ではありません。 O(n!)にはない関数があります(n ^ n自体など)。

12
Ted Hopp