web-dev-qa-db-fra.com

Qu'est-ce que O (log (n!)) Et O (n!) Et approximation de Stirling

Qu'est-ce que O(log(n!)) et O(n!)? Je crois que c'est O(n log(n)) et O(n^n)? Pourquoi?

Je pense que cela a à voir avec l'approximation de Stirling, mais je ne comprends pas très bien l'explication.

Quelqu'un pourrait-il me corriger si je me trompe (à propos de O(log(n!) = O(n log(n)))? Et si possible les mathématiques en termes plus simples? Je ne pense pas que je devrai prouver qu'en réalité je veux juste une idée de comment cela fonctionne.

37
Jiew Meng

O(n!) n'est pas équivalent à O(n^n). Elle est asymptotiquement inférieure à O(n^n).

O(log(n!)) est égal à O(n log(n)). Voici une façon de prouver que:

Notez qu'en utilisant la règle de log log(mn) = log(m) + log(n) nous pouvons voir que:

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


La preuve que O(log(n!)) ⊆ O(n log(n)):

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

Ce qui est inférieur à:

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

Donc O(log(n!)) est un sous-ensemble de O(n log(n))


La preuve que O(n log(n)) ⊆ O(log(n!)):

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

Ce qui est supérieur à (la moitié gauche de cette expression avec tous les (n-x) Remplacés par n/2:

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

Donc O(n log(n)) est un sous-ensemble de O(log(n!)).


Depuis O(n log(n)) ⊆ O(log(n!)) ⊆ O(n log(n)), ce sont des classes big-Oh équivalentes.

68
Paulpro

Par approximation de Stirling,

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

Pour les grands n, le côté droit est dominé par le terme n log (n). Cela implique que O (log (n!)) = O (n log (n)).

Plus formellement, une définition de "Big O" est que f(x) = O(g(x)) if et seulement si

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

En utilisant l'approximation de Stirling, il est facile de montrer ce log (n!) ∈ O (n log (n)) en utilisant cette définition.

Un argument similaire s'applique à n !. En prenant l'exponentielle des deux côtés de l'approximation de Stirling, nous trouvons que, pour les grands n, n! se comporte asymptotiquement comme n ^ (n + 1)/exp (n). Puisque n/exp (n) → 0 comme n → ∞, nous pouvons conclure que n! ∈ O (n ^ n) mais O (n!) N'est pas équivalent à O (n ^ n). Il y a des fonctions dans O (n ^ n) qui ne sont pas dans O (n!) (Comme n ^ n lui-même).

12
Ted Hopp