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.