Là log (n!) = Θ (n · log (n))?


217

Tôi sẽ chỉ ra rằng log ( n !) = Θ ( n · log ( n )) .

Một gợi ý đã được đưa ra là tôi nên hiển thị giới hạn trên với n n và hiển thị giới hạn dưới với ( n / 2) ( n / 2) . Điều này dường như không trực quan với tôi. Tại sao đó là trường hợp? Tôi chắc chắn có thể thấy làm thế nào để chuyển đổi n n thành n · log ( n ) (tức là ghi cả hai mặt của một phương trình), nhưng đó là loại hoạt động ngược.

Điều gì sẽ là cách tiếp cận chính xác để giải quyết vấn đề này? Có nên vẽ cây đệ quy? Không có gì đệ quy về điều này, vì vậy đó dường như không phải là một cách tiếp cận có khả năng ..


1
Bạn thực sự nên viết nó bao gồm cả "as n ->"
MartW

2
Bài tập thú vị: sử dụng thủ thuật tương tự để chỉ ra rằng chuỗi điều hòa 1/1 + 1/2 + 1/3 + 1/4 + ... phân kỳ đến vô cùng.
Yoo

10
Điều này có nên ở cs.stackexchange.com không?
CodyBugstein

5
@CodyBugstein, cs.stackexchange.com đã không tồn tại trở lại khi câu hỏi được đặt ra
MrMartin

Câu trả lời:


303

Nhớ lấy

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

Bạn có thể có được giới hạn trên bởi

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

Và bạn có thể có được giới hạn dưới bằng cách làm một điều tương tự sau khi vứt bỏ nửa đầu của tổng số:

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
Đây là một bằng chứng rất hay cho giới hạn trên: log (n!) = Log (1) + ... + log (n) <= n log (n) => log (n!) = O (n log n ). Tuy nhiên, để chứng minh giới hạn dưới (và do đó là tetha lớn), có lẽ bạn sẽ cần xấp xỉ của Stirling.
Mehrdad Afshari

33
Bạn không cần xấp xỉ của Sterling cho giới hạn dưới. log (n!) = log (1) + ... + log (n)> = log (n / 2) + ... + log (n)> = n / 2 * log (n / 2) = Omega (n log n).
Keith Randall

2
@Keith: Tôi chưa hiểu. Bạn có thể (hoặc ai đó) mở rộng thêm một vài điều khoản cho tôi trong phần "..." của "log (n / 2) + ... + log (n)" không? Cảm ơn!
j_random_hacker

6
@j_random_hacker: log(n/2) + log(n/2 + 1) + ... + log(n - 1) + log(n)(một nửa số điều khoản lớn hơn log(n!)). Thật ra, tôi chỉ đọc câu hỏi và thấy rằng manh mối được nêu trong câu hỏi. Về cơ bản, (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
lời giải thích này tương tự như câu trả lời được chấp nhận, nhưng có thêm một chút chi tiết: mcs.sdsmt.edu/ecorwin/cs372/handouts/thetaaleighfactorial.htmlm
gayavat

40

Tôi nhận ra đây là một câu hỏi rất cũ với một câu trả lời được chấp nhận, nhưng không có câu trả lời nào trong số này thực sự sử dụng cách tiếp cận được gợi ý bởi gợi ý.

Đó là một lập luận khá đơn giản:

n!(= 1 * 2 * 3 * ... * n) là tích của các nsố nhỏ hơn hoặc bằng n. Do đó, nó nhỏ hơn tích của ntất cả các số bằng n; I E,n^n .

Một nửa số - tức là n/2của chúng - trong n!sản phẩm lớn hơn hoặc bằng n/2. Do đó, sản phẩm của họ lớn hơn sản phẩm của các n/2số bằng nhau n/2; I E(n/2)^(n/2) .

Lấy nhật ký trong suốt để thiết lập kết quả.


9
Điều này thực sự giống như phiên bản nhật ký trong câu trả lời được chấp nhận nhưng lấy logarit sau thay vì trước đó. (mặc dù rõ ràng hơn là sử dụng gợi ý)
hugomg

13

nhập mô tả hình ảnh ở đây

Xin lỗi, tôi không biết cách sử dụng cú pháp LaTeX trên stackoverflow ..


1
Đây là một lời giải thích tuyệt vời! Tôi có thể làm theo điều này cho đến bước 7, nhưng sau đó tôi không thể giải mã được phép toán xảy ra giữa bước 7 và bước 8 ... :-(
Z3d4s

3
@ Z3d4s Đối số trong bước 7 về cơ bản là thuật ngữ đầu tiên ở phía bên phải là thuật ngữ chi phối và do đó log (n!) Có thể xấp xỉ bằng n log (n) hoặc đó là thứ tự n log (n) được biểu thị bằng ký hiệu O lớn O (n * log (n)).
ngẫu nhiên

1
@ Z3d4s các bước chuyển đổi 7-8 đang nói rằng n logn == log (n ^ n) và để hiển thị ràng buộc ở đây, bạn có thể nói thuật ngữ đầu tiên luôn lớn hơn thuật ngữ thứ hai bạn có thể kiểm tra bất kỳ giá trị lớn hơn nào và để thể hiện sự phức tạp của big-O, chúng tôi sẽ luôn lấy mục thống trị của tất cả. Vì vậy, n logn đóng góp cho thời gian big-O.
Shiv Prakash


7

Đối với giới hạn dưới,

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)

Kết hợp cả hai giới hạn:

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

Bằng cách chọn hằng số giới hạn dưới lớn hơn (1/2), chúng ta có thể bù -1 trong khung.

Do đó lg (n!) = Theta (n lg n)


2
Đạo hàm mở rộng này là cần thiết bởi vì, "cái gì đó"> = n / 2 * lg (n / 2) không bằng omega (n lg n) đã được đề cập trong một trong những nhận xét trước đó.
Vivek Anand Sampath

Điều này sẽ đọc "một SMALLER không đổi hơn (1/2)" khi chúng ta đang cố gắng tìm một giới hạn thấp hơn. Bất kỳ hằng số, c, nhỏ hơn (1/2) cuối cùng sẽ tạo ra c n logn <= (1/2) n * logn- (1/2) n, cho n đủ lớn.
Matthew

3

Giúp bạn xa hơn, nơi Mick Sharpe để lại cho bạn:

Việc tạo ra nó khá đơn giản: xem http://en.wikipedia.org/wiki/Logarithm -> Lý thuyết nhóm

log (n!) = log (n * (n-1) * (n-2) * ... * 2 * 1) = log (n) + log (n-1) + ... + log (2 ) + nhật ký (1)

Hãy nghĩ về n là vô cùng lớn . Điểm trừ vô hạn là gì? hay trừ hai? Vân vân.

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

Và sau đó nghĩ về inf như n.


2

Cảm ơn, tôi tìm thấy câu trả lời của bạn thuyết phục nhưng trong trường hợp của tôi, tôi phải sử dụng Θ thuộc tính:

log(n!) = Θ(n·log n) =>  log(n!) = O(n log n) and log(n!) = Ω(n log n)

để xác minh sự cố tôi đã tìm thấy trang web này, nơi bạn có tất cả quy trình được giải thích: http://www.mcs.sdsmt.edu/ecorwin/cs372/handouts/thetaaleighfactorial.htmlm


1

Điều này có thể giúp:

e ln (x) = x

(l m ) n = l m * n

3
Trên thực tế, đó là sai: 1 ^ (m ^ n)! = 1 ^ (m n) nó phải là (1 ^ m) ^ n = 1 ^ (m n)
Pindatjuh

Errr tôi có nghĩa là L thay vì 1 trong nhận xét trên.
Pindatjuh

Anh ấy đã không viết 1 ^ (m ^ n) anh ấy đã viết (l ^ m) ^ n
CodyBugstein

1
@CodyBugstein: Có một chỉnh sửa được thực hiện để khắc phục sự cố, bạn đã nhận xét nhiều năm sau đó khi lỗi được ẩn trong lịch sử
Ben Voigt

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.