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.
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.
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).