Czy log (n!) = Θ (n · log (n))?


218

Mam pokazać, że log ( n !) = Θ ( n · log ( n )) .

Podano podpowiedź, że powinnam pokazać górną granicę za pomocą n n, a dolną granicę za pomocą ( n / 2) ( n / 2) . Nie wydaje mi się to aż tak intuicyjne. Dlaczego miałoby tak być? Z pewnością widzę, jak przekonwertować n n na n · log ( n ) (tj. Zalogować obie strony równania), ale to trochę działa wstecz.

Jakie byłoby właściwe podejście do rozwiązania tego problemu? Czy powinienem narysować drzewo rekurencyjne? Nie ma w tym nic rekurencyjnego, więc nie wydaje się to prawdopodobne.


1
Naprawdę powinieneś to napisać, włączając „as n -> ∞”
MartW

2
Zabawne ćwiczenie: użyj podobnej sztuczki, aby pokazać, że szereg harmonicznych 1/1 + 1/2 + 1/3 + 1/4 + ... rozchodzi się w nieskończoność.
Yoo

10
Czy nie powinno to być na cs.stackexchange.com?
CodyBugstein,

5
@CodyBugstein, cs.stackexchange.com nie istniał, kiedy zadawano pytanie
MrMartin,

Odpowiedzi:


303

Zapamietaj to

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

Możesz uzyskać górną granicę

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

Możesz uzyskać dolną granicę, robiąc podobne rzeczy po wyrzuceniu pierwszej połowy sumy:

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
Jest to bardzo dobry dowód na górną granicę: log (n!) = Log (1) + ... + log (n) <= n log (n) => log (n!) = O (n log n ). Jednak, aby udowodnić dolną granicę (i w konsekwencji big-tetha), prawdopodobnie będziesz potrzebować aproksymacji Stirlinga.
Mehrdad Afshari,

33
Nie potrzebujesz przybliżenia Sterlinga dla dolnej granicy. log (n!) = log (1) + ... + log (n)> = log (n / 2) + ... + log (n)> = n / 2 * log (n / 2) = Omega (n log n).
Keith Randall,

2
@Keith: Jeszcze tego nie rozumiem. Czy mógłbyś (lub ktoś) rozwinąć dla mnie jeszcze kilka terminów w części „...” dziennika (n / 2) + ... + log (n) „proszę? Dzięki!
j_random_hacker

6
@j_random_hacker: log(n/2) + log(n/2 + 1) + ... + log(n - 1) + log(n)(większa połowa warunków log(n!)). Właściwie właśnie przeczytałem pytanie i zobaczyłem, że wskazówka jest zawarta w pytaniu. Zasadniczo (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
to wyjaśnienie jest podobne do przyjętej odpowiedzi, ale zawiera nieco więcej szczegółów: mcs.sdsmt.edu/ecorwin/cs372/handouts/theta_n_factorial.htm
gayavat

40

Zdaję sobie sprawę, że jest to bardzo stare pytanie z zaakceptowaną odpowiedzią, ale żadna z tych odpowiedzi nie korzysta z podejścia sugerowanego przez wskazówkę.

To dość prosty argument:

n!(= 1 * 2 * 3 * ... * n) jest iloczynem nliczb mniejszych lub równych n. Dlatego jest mniejszy niż iloczyn nliczb wszystkich równych n; tj n^n.

Połowa liczb - tj. n/2Ich - w n!produkcie jest większa lub równa n/2. Dlatego ich iloczyn jest większy niż iloczyn n/2liczb wszystkich równych n/2; tj (n/2)^(n/2).

Weź dzienniki, aby ustalić wynik.


9
W rzeczywistości jest to dokładnie to samo, co wersja dziennika w zaakceptowanej odpowiedzi, ale biorąc logarytm za zamiast przed. (jednak jaśniej wykorzystuje podpowiedź)
hugomg,

14

wprowadź opis zdjęcia tutaj

Przepraszam, nie wiem, jak używać składni LaTeX na stackoverflow ..


1
To świetne wytłumaczenie! Mógłbym to zrobić do kroku 7, ale potem nie mogę zdekodować matematyki, która dzieje się między krokiem 7 a krokiem 8: :-(
Z3d4s

3
@ Z3d4s Argument w kroku 7 jest zasadniczo taki, że pierwszy termin po prawej stronie jest terminem dominującym i że log (n!) Może zatem być aproksymowany przez n log (n) lub że jest rzędu n log (n) który jest wyrażony dużą notacją O O (n * log (n)).
losowo9

1
@ Z3d4s, konwersja kroków 7-8 mówi, że n logn == log (n ^ n), a dla pokazania powiązania możesz powiedzieć, że pierwszy termin jest zawsze większy niż drugi, możesz sprawdzić, czy nie ma większych wartości, i za wyrażenie złożoności wielkiej-O zawsze weźmiemy dominujący element wszystkich. A więc n logn przyczynia się do wielkiego czasu.
Shiv Prakash


7

Dla dolnej granicy,

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)

Łączenie obu granic:

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

Wybierając niższą stałą graniczną większą niż (1/2), możemy skompensować -1 wewnątrz nawiasu.

Zatem lg (n!) = Theta (n lg n)


2
Ta rozszerzona pochodna jest potrzebna, ponieważ „coś”> = n / 2 * lg (n / 2) nie jest równe omega (n lg n), o której wspomniano w jednym z poprzednich komentarzy.
Vivek Anand Sampath,

Powinno to brzmieć „stała MNIEJSZA niż (1/2)”, gdy próbujemy znaleźć dolną granicę. Dowolną stałą, C, mniejszą niż (1/2), aby w końcu C n logn <= (1/2) * n logn- (1/2), n, o wystarczająco dużej n.
Matthew

3

Pomagając ci dalej, gdzie zostawił cię Mick Sharpe:

Wyprowadzenie jest dość proste: patrz http://en.wikipedia.org/wiki/Logarithm -> Teoria grupy

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

Pomyśl o n jako nieskończenie dużym . Co to jest nieskończony minus jeden? czy minus dwa? itp.

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

A potem pomyśl o inf jako n.



1

To może pomóc:

e ln (x) = x

i

(l m ) n = l m * n

3
Właściwie to źle: 1 ^ (m ^ n)! = 1 ^ (m n) to musi być (1 ^ m) ^ n = 1 ^ (m n)
Pindatjuh

Errr Mam na myśli L zamiast 1 w powyższym komentarzu.
Pindatjuh

Nie napisał 1 ^ (m ^ n) napisał (l ^ m) ^ n
CodyBugstein

1
@CodyBugstein: Wprowadzono edycję, aby rozwiązać problem, skomentowałeś lata później, gdy błąd został ukryty w historii
Ben Voigt

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.