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


217

Ich soll zeigen, dass log ( n !) = Θ ( n · log ( n )) .

Es wurde ein Hinweis gegeben, dass ich die Obergrenze mit n n und die Untergrenze mit ( n / 2) ( n / 2) zeigen sollte . Das scheint mir nicht so intuitiv zu sein. Warum sollte das so sein? Ich kann definitiv sehen, wie man n n in n · log ( n ) konvertiert (dh beide Seiten einer Gleichung protokolliert), aber das funktioniert irgendwie rückwärts.

Was wäre der richtige Ansatz, um dieses Problem anzugehen? Soll ich den Rekursionsbaum zeichnen? Daran ist nichts Rekursives, daher scheint dies kein wahrscheinlicher Ansatz zu sein.


1
Sie sollten es wirklich schreiben, einschließlich des "as n -> ∞"
MartW

2
Unterhaltsame Übung: Verwenden Sie den ähnlichen Trick, um zu zeigen, dass die harmonische Reihe 1/1 + 1/2 + 1/3 + 1/4 + ... gegen unendlich abweicht.
Yoo

10
Sollte dies nicht bei cs.stackexchange.com sein?
CodyBugstein

5
@CodyBugstein, cs.stackexchange.com existierte nicht zurück, als die Frage gestellt wurde
MrMartin

Antworten:


303

Erinnere dich daran

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

Sie können die Obergrenze von erhalten

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

Und Sie können die Untergrenze erreichen, indem Sie etwas Ähnliches tun, nachdem Sie die erste Hälfte der Summe weggeworfen haben:

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
Dies ist ein sehr schöner Beweis für die Obergrenze: log (n!) = Log (1) + ... + log (n) <= n log (n) => log (n!) = O (n log n ). Um jedoch die Untergrenze (und folglich Big-Tetha) zu beweisen, benötigen Sie wahrscheinlich Stirlings Approximation.
Mehrdad Afshari

33
Für eine Untergrenze benötigen Sie keine Sterling-Näherung. log (n!) = log (1) + ... + log (n)> = log (n / 2) + ... + log (n)> = n / 2 * log (n / 2) = Omega (n log n).
Keith Randall

2
@ Keith: Ich verstehe es noch nicht. Könnten Sie (oder jemand) bitte ein paar weitere Begriffe für mich im Teil "..." von "log (n / 2) + ... + log (n)" erweitern? Vielen Dank!
j_random_hacker

6
@j_random_hacker: log(n/2) + log(n/2 + 1) + ... + log(n - 1) + log(n)(größere Hälfte der Bedingungen von log(n!)). Eigentlich habe ich gerade die Frage gelesen und gesehen, dass der Hinweis in der Frage angegeben ist. Grundsätzlich (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
Diese Erklärung ähnelt der akzeptierten Antwort, enthält jedoch einige weitere Details: mcs.sdsmt.edu/ecorwin/cs372/handouts/theta_n_factorial.htm
gayavat

40

Mir ist klar, dass dies eine sehr alte Frage mit einer akzeptierten Antwort ist, aber keine dieser Antworten verwendet tatsächlich den im Hinweis vorgeschlagenen Ansatz.

Es ist ein ziemlich einfaches Argument:

n!(= 1 * 2 * 3 * ... * n) ist ein Produkt von nZahlen, die jeweils kleiner oder gleich sind n. Daher ist es weniger als das Produkt von nZahlen, die alle gleich sind n; dh , n^n.

Die Hälfte der Zahlen - dh n/2von ihnen - im n!Produkt sind größer oder gleich n/2. Daher ist ihr Produkt größer als das Produkt von n/2Zahlen, die alle gleich sind n/2; dh (n/2)^(n/2).

Führen Sie durchgehend Protokolle durch, um das Ergebnis zu ermitteln.


9
Dies ist eigentlich genau das Gleiche wie die Protokollversion in der akzeptierten Antwort, wobei jedoch der Logarithmus nachher statt vorher verwendet wird. (Es verwendet jedoch deutlicher den Hinweis)
Hugomg

13

Geben Sie hier die Bildbeschreibung ein

Entschuldigung, ich weiß nicht, wie ich die LaTeX-Syntax für den Stapelüberlauf verwenden soll.


1
Das ist eine großartige Erklärung! Ich könnte dies bis Schritt 7 verfolgen, aber dann kann ich die Mathematik, die zwischen Schritt 7 und Schritt 8 auftritt, nicht dekodieren ... :-(
Z3d4s

3
@ Z3d4s Das Argument in Schritt 7 ist im Grunde, dass der erste Term auf der rechten Seite der dominante Term ist und dass log (n!) Daher durch n log (n) angenähert werden kann oder dass es in der Ordnung n log (n) liegt. was durch die große O-Notation O (n * log (n)) ausgedrückt wird.
random9

1
@ Z3d4s In den Schritten 7 bis 8 heißt es, dass n logn == log (n ^ n) ist. Um die Grenze hier anzuzeigen, können Sie sagen, dass der erste Term immer größer ist als der zweite Term. Sie können nach größeren Werten suchen Um die große Komplexität auszudrücken, werden wir immer den dominierenden Punkt von allen nehmen. N logn trägt also zur Big-O-Zeit bei.
Shiv Prakash


7

Für die Untergrenze

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)

Beide Grenzen kombinieren:

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

Durch Auswahl einer unteren Grenzkonstante größer als (1/2) können wir -1 innerhalb der Klammer kompensieren.

Somit ist lg (n!) = Theta (n lg n)


2
Diese erweiterte Ableitung wird benötigt, weil "etwas"> = n / 2 * lg (n / 2) nicht gleich Omega (n lg n) ist, das in einem der vorherigen Kommentare erwähnt wurde.
Vivek Anand Sampath

Dies sollte "eine Konstante KLEINER als (1/2)" lauten, da wir versuchen, eine Untergrenze zu finden. Jede Konstante c, die kleiner als (1/2) ist, ergibt schließlich c n logn <= (1/2) n * logn- (1/2) n für ein ausreichend großes n.
Matthew

3

Wir helfen Ihnen weiter, wo Mick Sharpe Sie verlassen hat:

Die Ableitung ist recht einfach: siehe http://en.wikipedia.org/wiki/Logarithm -> Gruppentheorie

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

Stellen Sie sich n als unendlich groß vor . Was ist unendlich minus eins? oder minus zwei? etc.

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

Und dann denke an inf als n.



1

Dies könnte helfen:

e ln (x) = x

und

(l m ) n = l m * n

3
Eigentlich ist das falsch: 1 ^ (m ^ n)! = 1 ^ (m n) muss es sein (1 ^ m) ^ n = 1 ^ (m n)
Pindatjuh

Errr Ich meine L anstelle von 1 im obigen Kommentar.
Pindatjuh

Er schrieb nicht 1 ^ (m ^ n) er schrieb (l ^ m) ^ n
CodyBugstein

1
@CodyBugstein: Es wurde eine Bearbeitung vorgenommen, um das Problem zu beheben. Sie kommentierten Jahre später, als der Fehler in der Geschichte versteckt war
Ben Voigt

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.