Est-ce que log (n!) = Θ (n · log (n))?


218

Je dois montrer que log ( n !) = Θ ( n · log ( n )) .

Un indice a été donné que je devrais montrer la borne supérieure avec n n et montrer la borne inférieure avec ( n / 2) ( n / 2) . Cela ne me semble pas du tout intuitif. Pourquoi en serait-il ainsi? Je peux certainement voir comment convertir n n en n · log ( n ) (c'est-à-dire enregistrer les deux côtés d'une équation), mais c'est une sorte de travail en arrière.

Quelle serait la bonne approche pour résoudre ce problème? Dois-je dessiner l'arbre de récursivité? Il n'y a rien de récursif à ce sujet, donc cela ne semble pas être une approche probable.


1
Vous devriez vraiment l'écrire, y compris le "as n -> ∞"
MartW

2
Exercice amusant: utilisez la même astuce pour montrer que la série harmonique 1/1 + 1/2 + 1/3 + 1/4 + ... diverge à l'infini.
Yoo

10
Cela ne devrait-il pas être sur cs.stackexchange.com?
CodyBugstein

5
@CodyBugstein, cs.stackexchange.com n'existait pas lorsque la question a été posée
MrMartin

Réponses:


303

N'oubliez pas que

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

Vous pouvez obtenir la limite supérieure par

log(1) + log(2) + ... + log(n) <= log(n) + log(n) + ... + log(n)
                                = n*log(n)

Et vous pouvez obtenir la borne inférieure en faisant une chose similaire après avoir jeté la première moitié de la somme:

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
Ceci est une très belle preuve pour la borne supérieure: log (n!) = Log (1) + ... + log (n) <= n log (n) => log (n!) = O (n log n ). Cependant, pour prouver la borne inférieure (et par conséquent le grand tétha), vous aurez probablement besoin de l'approximation de Stirling.
Mehrdad Afshari

33
Vous n'avez pas besoin de l'approximation de Sterling pour une borne inférieure. log (n!) = log (1) + ... + log (n)> = log (n / 2) + ... + log (n)> = n / 2 * log (n / 2) = Omega (n log n).
Keith Randall

2
@Keith: Je ne comprends pas encore. Pourriez-vous (ou quelqu'un) développer quelques termes supplémentaires pour moi dans la partie "..." de "log (n / 2) + ... + log (n)" s'il vous plaît? Merci!
j_random_hacker

6
@j_random_hacker: log(n/2) + log(n/2 + 1) + ... + log(n - 1) + log(n)(plus grande moitié des termes de log(n!)). En fait, je viens de lire la question et j'ai vu que l'indice est indiqué dans la question. Fondamentalement, (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

4
cette explication est similaire à la réponse acceptée, mais contient un peu plus de détails: mcs.sdsmt.edu/ecorwin/cs372/handouts/theta_n_factorial.htm
gayavat

40

Je me rends compte que c'est une très vieille question avec une réponse acceptée, mais aucune de ces réponses n'utilise réellement l'approche suggérée par l'indice.

C'est un argument assez simple:

n!(= 1 * 2 * 3 * ... * n) est un produit de nnombres inférieurs ou égaux chacun n. Il est donc inférieur au produit de nnombres tous égaux à n; à savoir n^n.

La moitié des nombres - c'est-à-dire n/2d'entre eux - dans le n!produit sont supérieurs ou égaux à n/2. Par conséquent, leur produit est supérieur au produit de n/2nombres tous égaux à n/2; ie (n/2)^(n/2).

Prenez des journaux tout au long pour établir le résultat.


9
Il s'agit en fait de la même chose que la version du journal dans la réponse acceptée, mais en prenant le logarithme après au lieu d'avant. (il utilise cependant plus clairement l'indice)
hugomg

14

entrez la description de l'image ici

Désolé, je ne sais pas comment utiliser la syntaxe LaTeX sur stackoverflow ..


1
Ceci est une excellente explication! Je pourrais suivre ceci jusqu'à l'étape 7, mais je ne peux pas décoder la mathémagique qui se produit entre l'étape 7 et l'étape 8 ... :-(
Z3d4s

3
@ Z3d4s L'argument de l'étape 7 est fondamentalement que le premier terme à droite est le terme dominant et que log (n!) Peut donc être approximé par n log (n) ou qu'il est d'ordre n log (n) qui s'exprime par la grande notation O O (n * log (n)).
random9

1
@ Z3d4s ce que la conversion des étapes 7-8 indique que n logn == log (n ^ n) et pour montrer la limite ici, vous pouvez dire que le premier terme est toujours supérieur au deuxième terme, vous pouvez vérifier toute valeur plus grande, et pour exprimer la complexité du big-O, nous prendrons toujours l'élément dominant de tous. Donc, n logn contribue au temps big-O.
Shiv Prakash


7

Pour la borne inférieure,

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)

Combiner les deux limites:

1/2 (n lg n - 1) <= lg (n!) <= N lg n

En choisissant une constante inférieure supérieure à (1/2), nous pouvons compenser -1 à l'intérieur du support.

Ainsi lg (n!) = Thêta (n lg n)


2
Cette dérivation étendue est nécessaire car, "quelque chose"> = n / 2 * lg (n / 2) n'est pas égal à oméga (n lg n) qui a été mentionné dans l'un des commentaires précédents.
Vivek Anand Sampath

Cela devrait se lire "une constante plus petite que (1/2)" car nous essayons de trouver une borne inférieure. Toute constante, c, inférieure à (1/2) fera finalement c n logn <= (1/2) n * logn- (1/2) n, pour un n assez grand.
Matthew

3

Pour vous aider plus loin, là où Mick Sharpe vous a laissé:

Sa dérivation est assez simple: voir http://en.wikipedia.org/wiki/Logarithm -> Théorie des groupes

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

Considérez n comme infiniment grand . Qu'est-ce que l'infini moins un? ou moins deux? etc.

log (inf) + log (inf) + log (inf) + ... = inf * log (inf)

Et puis pensez à inf comme n.



1

Cela pourrait aider:

e ln (x) = x

et

(l m ) n = l m * n

3
En fait, c'est faux: 1 ^ (m ^ n)! = 1 ^ (m n) ça doit être (1 ^ m) ^ n = 1 ^ (m n)
Pindatjuh

Errr, je veux dire L au lieu de 1 dans le commentaire ci-dessus.
Pindatjuh

Il n'a pas écrit 1 ^ (m ^ n) il a écrit (l ^ m) ^ n
CodyBugstein

1
@CodyBugstein: Une modification a été effectuée pour résoudre le problème, vous avez commenté des années plus tard lorsque l'erreur était cachée dans l'histoire
Ben Voigt

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.