Log (n!) = Θ (n · log (n)) è?


218

Devo mostrare quel registro ( n !) = Θ ( n · registro ( n )) .

Un suggerimento è stato dato che devo visualizza limite superiore con n n e mostra lower bound con ( n / 2) ( n / 2) . Questo non mi sembra così intuitivo. Perché sarebbe così? Posso sicuramente vedere come convertire n n al n · log ( n ) (log entrambi i lati di un'equazione), ma questo è il tipo di lavoro a ritroso.

Quale sarebbe l'approccio corretto per affrontare questo problema? Devo disegnare l'albero di ricorsione? Non c'è nulla di ricorsivo al riguardo, quindi non sembra un approccio probabile.


1
Dovresti davvero scriverlo includendo "as n -> ∞"
MartW

2
Esercizio divertente: usa il trucco simile per mostrare che la serie armonica 1/1 + 1/2 + 1/3 + 1/4 + ... diverge all'infinito.
Yoo

10
Non dovrebbe essere su cs.stackexchange.com?
CodyBugstein,

5
@CodyBugstein, cs.stackexchange.com non esisteva quando è stata posta la domanda
MrMartin

Risposte:


303

Ricordati che

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

È possibile ottenere il limite superiore da

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

E puoi ottenere il limite inferiore facendo una cosa simile dopo aver buttato via la prima metà della somma:

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
Questa è una bella prova per il limite superiore: log (n!) = Log (1) + ... + log (n) <= n log (n) => log (n!) = O (n log n ). Tuttavia, per dimostrare il limite inferiore (e di conseguenza il big-tetha), probabilmente avrai bisogno dell'approssimazione di Stirling.
Mehrdad Afshari,

33
Non è necessaria l'approssimazione di Sterling per un limite inferiore. log (n!) = log (1) + ... + log (n)> = log (n / 2) + ... + log (n)> = n / 2 * log (n / 2) = Omega (n registro n).
Keith Randall,

2
@Keith: non capisco ancora. Potresti (o qualcuno) espandere qualche altro termine per me nella parte "..." di "log (n / 2) + ... + log (n)" per favore? Grazie!
j_random_hacker,

6
@j_random_hacker: log(n/2) + log(n/2 + 1) + ... + log(n - 1) + log(n)(metà più grande dei termini di log(n!)). In realtà, ho appena letto la domanda e ho visto che l'indizio è indicato nella domanda. Fondamentalmente, (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
questa spiegazione è simile alla risposta accettata, ma ha qualche dettaglio in più: mcs.sdsmt.edu/ecorwin/cs372/handouts/theta_n_factorial.htm
gayavat

40

Mi rendo conto che questa è una domanda molto antica con una risposta accettata, ma nessuna di queste risposte utilizza effettivamente l'approccio suggerito dal suggerimento.

È un argomento piuttosto semplice:

n!(= 1 * 2 * 3 * ... * n) è un prodotto di nnumeri ciascuno inferiore o uguale a n. Pertanto è inferiore al prodotto di nnumeri tutti uguali a n; Per esempio, n^n.

La metà dei numeri - vale a dire n/2di essi - nel n!prodotto è maggiore o uguale a n/2. Pertanto il loro prodotto è maggiore del prodotto di n/2numeri tutti uguali a n/2; vale a dire (n/2)^(n/2).

Prendi i registri per stabilire il risultato.


9
Questo è in realtà lo stesso della versione del registro nella risposta accettata, ma prendendo il logaritmo dopo anziché prima. (usa più chiaramente il suggerimento però)
hugomg

14

inserisci qui la descrizione dell'immagine

Spiacenti, non so come utilizzare la sintassi LaTeX su StackOverflow.


1
Questa è un'ottima spiegazione! Potrei seguire questo fino al passaggio 7, ma poi non riesco a decodificare la matematica che si verifica tra il passaggio 7 e il passaggio 8 ... :-(
Z3d4s

3
@ Z3d4s L'argomento del passaggio 7 è fondamentalmente che il primo termine sul lato destro è il termine dominante e che log (n!) Può quindi essere approssimato da n log (n) o che è di ordine n log (n) che è espresso dalla grande notazione O O (n * log (n)).
random9

1
@ Z3d4s quali sono i passaggi 7-8 che dice che n logn == log (n ^ n) e per mostrare il limite qui puoi dire che il primo termine è sempre maggiore del secondo termine che puoi controllare per valori più grandi, e per esprimere la complessità della grande O prenderemo sempre l'elemento dominante di tutti. Quindi n logn contribuisce al big-O time.
Shiv Prakash,


7

Per limite inferiore,

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)

Combinando entrambi i limiti:

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

Scegliendo una costante limite inferiore maggiore di (1/2) possiamo compensare -1 all'interno della parentesi.

Quindi lg (n!) = Theta (n lg n)


2
Questa derivazione estesa è necessaria perché "qualcosa"> = n / 2 * lg (n / 2) non è uguale a omega (n lg n) menzionato in uno dei commenti precedenti.
Vivek Anand Sampath,

Questo dovrebbe leggere "una costante PIÙ PICCOLO di (1/2)" mentre stiamo cercando di trovare un limite inferiore. Qualsiasi costante, c, minore di (1/2) alla fine farà c n logn <= (1/2) n * logn- (1/2) n, per un n abbastanza grande.
Matteo

3

Aiutandoti ulteriormente, dove Mick Sharpe ti ha lasciato:

La sua derivazione è abbastanza semplice: vedi http://en.wikipedia.org/wiki/Logarithm -> Teoria dei gruppi

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

Pensa a n come infinitamente grande . Che cos'è infinito meno uno? o meno due? eccetera.

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

E poi pensa a inf come n.



1

Questo potrebbe aiutare:

e ln (x) = x

e

(l m ) n = l m * n

3
In realtà, è sbagliato: 1 ^ (m ^ n)! = 1 ^ (m n) deve essere (1 ^ m) ^ n = 1 ^ (m n)
Pindatjuh

Errr intendo L invece di 1 nel commento sopra.
Pindatjuh,

Non ha scritto 1 ^ (m ^ n) ha scritto (l ^ m) ^ n
CodyBugstein il

1
@CodyBugstein: è stata apportata una modifica per risolvere il problema, hai commentato anni dopo quando l'errore era nascosto nella storia
Ben Voigt

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.