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


217

Saya menunjukkan log itu ( n !) = Θ ( n · log ( n )) .

Sebuah petunjuk diberikan bahwa saya harus menunjukkan batas atas dengan n n dan menunjukkan batas bawah dengan ( n / 2) ( n / 2) . Sepertinya ini tidak intuitif bagi saya. Mengapa demikian? Saya pasti bisa melihat bagaimana mengkonversi n n ke n · log ( n ) (yaitu mencatat kedua sisi persamaan), tapi itu semacam bekerja mundur.

Apa yang akan menjadi pendekatan yang tepat untuk mengatasi masalah ini? Haruskah saya menggambar pohon rekursi? Tidak ada yang rekursif tentang ini, sehingga sepertinya bukan pendekatan yang mungkin ..


1
Anda harus benar-benar menulisnya termasuk "as n -> ∞"
MartW

2
Latihan menyenangkan: gunakan trik serupa untuk menunjukkan bahwa seri harmonik 1/1 + 1/2 + 1/3 + 1/4 + ... menyimpang hingga tak terbatas.
Yoo

10
Bukankah ini seharusnya di cs.stackexchange.com?
CodyBugstein

5
@CodyBugstein, cs.stackexchange.com tidak ada kembali ketika pertanyaan diajukan
MrMartin

Jawaban:


303

Ingat bahwa

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

Anda bisa mendapatkan batas atas dengan

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

Dan Anda bisa mendapatkan batas bawah dengan melakukan hal serupa setelah membuang setengah jumlah pertama:

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
Ini adalah bukti yang sangat bagus untuk batas atas: log (n!) = Log (1) + ... + log (n) <= n log (n) => log (n!) = O (n log n ). Namun, untuk membuktikan batas bawah (dan akibatnya tetha besar), Anda mungkin perlu perkiraan Stirling.
Mehrdad Afshari

33
Anda tidak perlu perkiraan Sterling untuk batas bawah. log (n!) = log (1) + ... + log (n)> = log (n / 2) + ... + log (n)> = n / 2 * log (n / 2) = Omega (n log n).
Keith Randall

2
@Keith: Saya belum mengerti. Bisakah Anda (atau seseorang) memperluas beberapa istilah lagi untuk saya di bagian "..." dari "log (n / 2) + ... + log (n)" tolong? Terima kasih!
j_random_hacker

6
@j_random_hacker: log(n/2) + log(n/2 + 1) + ... + log(n - 1) + log(n)(setengah dari ketentuan log(n!)). Sebenarnya, saya baru saja membaca pertanyaan dan melihat bahwa petunjuk tersebut dinyatakan dalam pertanyaan. Pada dasarnya, (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
penjelasan ini mirip dengan jawaban yang diterima, tetapi memiliki sedikit lebih detail: mcs.sdsmt.edu/ecorwin/cs372/handouts/theta_n_factorial.htm
gayavat

40

Saya menyadari ini adalah pertanyaan yang sangat lama dengan jawaban yang diterima, tetapi tidak satupun dari jawaban ini yang benar-benar menggunakan pendekatan yang disarankan oleh petunjuk.

Ini adalah argumen yang cukup sederhana:

n!(= 1 * 2 * 3 * ... * n) adalah produk nangka yang masing-masing kurang dari atau sama dengan n. Oleh karena itu kurang dari produk nnomor semua sama dengan n; yaitu n^n,.

Setengah dari angka - yaitu n/2dari mereka - dalam n!produk lebih besar atau sama dengan n/2. Oleh karena itu produk mereka lebih besar daripada produk n/2angka semua sama dengan n/2; yaitu (n/2)^(n/2).

Ambil seluruh log untuk menetapkan hasilnya.


9
Ini sebenarnya sama dengan versi log dalam jawaban yang diterima tetapi mengambil logaritma setelah daripada sebelumnya. (lebih jelas menggunakan petunjuk itu)
hugomg

13

masukkan deskripsi gambar di sini

Maaf, saya tidak tahu bagaimana menggunakan sintaks LaTeX di stackoverflow ..


1
Ini penjelasan yang bagus! Saya dapat mengikuti ini sampai langkah 7, tetapi kemudian saya tidak dapat mendekodekan matematika yang terjadi antara langkah 7 dan langkah 8 ... :-(
Z3d4s

3
@ Z3d4s Argumen dalam langkah 7 pada dasarnya adalah, bahwa suku pertama di sebelah kanan adalah suku dominan dan oleh karena itu log (n!) Oleh karena itu dapat didekati dengan n log (n) atau bahwa urutannya adalah n log (n) yang dinyatakan oleh notasi O besar O (n * log (n)).
random9

1
@ Z3d4s apa langkah 7-8 konversi mengatakan bahwa n logn == log (n ^ n) dan untuk menunjukkan batas di sini Anda dapat mengatakan istilah pertama selalu lebih besar daripada istilah kedua Anda dapat memeriksa nilai-nilai yang lebih besar, dan untuk mengekspresikan kompleksitas O-besar, kami akan selalu mengambil item yang mendominasi semuanya. Jadi n logn berkontribusi pada waktu big-O.
Shiv Prakash


7

Untuk batas bawah,

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)

Menggabungkan kedua batas:

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

Dengan memilih konstanta batas bawah lebih besar dari (1/2) kita dapat mengimbangi -1 di dalam braket.

Jadi lg (n!) = Theta (n lg n)


2
Derivasi yang diperluas ini diperlukan karena, "sesuatu"> = n / 2 * lg (n / 2) tidak sama dengan omega (n lg n) yang disebutkan dalam salah satu komentar sebelumnya.
Vivek Anand Sampath

Ini seharusnya berbunyi "KECIL yang konstan daripada (1/2)" karena kami berusaha menemukan batas bawah. Konstanta apa pun, c, lebih kecil dari (1/2) akhirnya akan menghasilkan c n logn <= (1/2) n * logn- (1/2) n, untuk n yang cukup besar.
Matius

3

Membantu Anda lebih jauh, tempat Mick Sharpe meninggalkan Anda:

Deriverasinya cukup sederhana: lihat http://en.wikipedia.org/wiki/Logarithm -> Teori Grup

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

Anggap n sebagai besar . Apa yang tak terhingga minus satu? atau minus dua? dll.

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

Dan kemudian pikirkan inf sebagai n.



1

Ini mungkin membantu:

e ln (x) = x

dan

(l m ) n = l m * n

3
Sebenarnya, itu salah: 1 ^ (m ^ n)! = 1 ^ (m n) harus (1 ^ m) ^ n = 1 ^ (m n)
Pindatjuh

Errr maksudku L, bukan 1 dalam komentar di atas.
Pindatjuh

Dia tidak menulis 1 ^ (m ^ n) dia menulis (l ^ m) ^ n
CodyBugstein

1
@CodyBugstein: Ada suntingan yang dibuat untuk memperbaiki masalah, Anda berkomentar bertahun-tahun kemudian ketika kesalahan itu tersembunyi dalam sejarah
Ben Voigt

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.