252 votes

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

Je dois montrer que log( n !) = ( n -log( n )) .

On m'a suggéré de montrer la limite supérieure avec n n et montrer la borne inférieure avec ( n /2) ( n /2) . Cela ne me semble pas si intuitif que cela. Pourquoi serait-ce le cas ? Je vois très bien comment convertir n n a n -log( n ) (c'est-à-dire loger les deux côtés d'une équation), mais c'est un peu travailler à l'envers.

Quelle serait l'approche correcte pour aborder ce problème ? Devrais-je dessiner l'arbre de récursion ? Il n'y a rien de récursif à ce sujet, donc cela ne semble pas être une approche probable

1 votes

Vous devriez vraiment l'écrire en incluant le "comme n -> ".

2 votes

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

13 votes

Ça ne devrait pas être à cs.stackexchange.com ?

359voto

Mick Sharpe Points 1463

Rappelez-vous que

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

Vous pouvez obtenir la limite supérieure en

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

Et vous pouvez obtenir la limite 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)

0 votes

Intéressant... En poussant cela dans une somme, il existe une approximation qui aboutit à la notation thêta elle-même (source : fr.wikipedia.org/wiki/Summation ) la question de savoir comment on en tire parti est entièrement distincte. Belle piste, merci !

7 votes

C'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 limite inférieure (et par conséquent big-tetha), vous aurez probablement besoin de l'approximation de Stirling.

39 votes

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

47voto

Nemo Points 32838

Je me rends compte qu'il s'agit d'une question très ancienne 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 n nombres dont chacun est inférieur ou égal à n . Il est donc inférieur au produit de n les nombres sont tous égaux à n ; c'est-à-dire, n^n .

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

Prenez des registres tout au long du processus pour établir le résultat.

12 votes

C'est en fait la même chose que la version logarithmique dans la réponse acceptée, mais en prenant le logarithme après au lieu d'avant. (Elle utilise cependant plus clairement l'indice).

0 votes

En quoi cela diffère-t-il de la réponse acceptée ?

0 votes

@Harsh Vérifiez l'historique des modifications sur la réponse acceptée et comparez les horodatages à cette réponse.

14voto

dsimcha Points 32831

Ver L'approximation de Stirling :

ln(n !) = n*ln(n) - n + O(ln(n))

où les deux derniers termes sont moins significatifs que le premier.

4voto

Pindatjuh Points 6929

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

Sa dérivation est très 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) + log(1)

Pensez à 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.

1voto

Anycorn Points 20521

Cela pourrait aider :

eln(x) = x

y

(lm)n = lm\*n

4 votes

En fait, c'est faux : 1^(m^n) != 1^(m n) il doit être (1^m)^n = 1^(m n)

0 votes

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

0 votes

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X