บันทึก (n!) = Θ (n ·บันทึก (n)) หรือไม่


218

ผมจะแสดงให้เห็นว่าการเข้าสู่ระบบ ( n !) = Θ ( n ·เข้าสู่ระบบ ( n ))

คำแนะนำที่ได้รับว่าผมควรจะแสดงผูกไว้บนที่มีn nและแสดงขอบเขตล่างด้วย( n / 2) ( n / 2) นี่ดูเหมือนจะไม่ง่ายสำหรับฉัน ทำไมเป็นเช่นนั้น แน่นอนฉันสามารถดูวิธีการแปลงn nเพื่อn ·เข้าสู่ระบบ ( n ) (เช่นเข้าสู่ระบบทั้งสองข้างของสมการ) แต่ที่เป็นชนิดของการทำงานย้อนหลัง

อะไรคือแนวทางที่ถูกต้องในการแก้ไขปัญหานี้ ฉันควรจะวาดต้นไม้เรียกซ้ำหรือไม่? ไม่มีอะไรซ้ำซากเกี่ยวกับเรื่องนี้ดังนั้นจึงไม่น่าจะเป็นวิธีการที่น่าสนใจ ..


1
คุณควรเขียนมันรวมถึง "เป็น n -> ∞"
MartW

2
การออกกำลังกายแสนสนุก: ใช้กลอุบายที่คล้ายกันเพื่อแสดงให้เห็นว่าซีรี่ส์ฮาร์โมนิก 1/1 + 1/2 + 1/3 + 1/4 + ... เปลี่ยนเป็นอินฟินิตี้
Yoo

10
สิ่งนี้ควรอยู่ที่ cs.stackexchange.com หรือไม่
CodyBugstein

5
@CodyBugstein, cs.stackexchange.com ไม่มีอยู่เมื่อคำถามถูกถาม
MrMartin

คำตอบ:


303

จำไว้

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

คุณสามารถรับขอบเขตบนด้วย

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

และคุณสามารถหาขอบเขตล่างได้โดยทำสิ่งเดียวกันหลังจากทิ้งครึ่งแรกของผลรวม:

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
นี่เป็นข้อพิสูจน์ที่ดีมากสำหรับขอบเขตบน: log (n!) = log (1) + ... + log (n) <= n log (n) => log (n!) = O (n log n ) อย่างไรก็ตามสำหรับการพิสูจน์ขอบเขตล่าง (และผลที่ตามมาใหญ่) คุณอาจต้องใช้การประมาณของ Stirling
Mehrdad Afshari

33
คุณไม่จำเป็นต้องประมาณค่าสเตอร์ลิงสำหรับขอบเขตที่ต่ำกว่า log (n!) = log (1) + ... + log (n)> = log (n / 2) + ... + log (n)> = n / 2 * log (n / 2) = Omega (n บันทึก n)
Keith Randall

2
@ Keith: ฉันยังไม่เข้าใจ คุณ (หรือบางคน) ขยายคำศัพท์เพิ่มเติมสำหรับฉันในส่วน "... " ของ "log (n / 2) + ... + log (n)" ได้ไหม? ขอบคุณ!
j_random_hacker

6
@j_random_hacker: log(n/2) + log(n/2 + 1) + ... + log(n - 1) + log(n)(มากกว่าครึ่งหนึ่งของข้อกำหนดlog(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
คำอธิบายนี้คล้ายกับคำตอบที่ยอมรับ แต่มีรายละเอียดเพิ่มเติมเล็กน้อย: mcs.sdsmt.edu/ecorwin/cs372/handouts/theta_n_factorial.htm
gayavat

40

ฉันรู้ว่านี่เป็นคำถามเก่าแก่ที่มีคำตอบที่ยอมรับได้ แต่ไม่มีคำตอบใด ๆ เหล่านี้จริง ๆ ใช้วิธีที่แนะนำโดยคำใบ้

มันเป็นเรื่องที่ค่อนข้างง่าย

n!(= 1 * 2 * 3 * * * * * * * * ... n) เป็นผลิตภัณฑ์ของตัวเลขแต่ละน้อยกว่าหรือเท่ากับn nดังนั้นมันจะน้อยกว่าผลิตภัณฑ์ของnตัวเลขทั้งหมดเท่ากับn; เช่นn^n.

ครึ่งหนึ่งของตัวเลข - คือn/2ของพวกเขา - ในผลิตภัณฑ์มากกว่าหรือเท่ากับn! n/2ดังนั้นผลิตภัณฑ์ของตนเป็นมากกว่าผลิตภัณฑ์ของn/2ตัวเลขทั้งหมดเท่ากับn/2; (n/2)^(n/2)กล่าวคือ

นำบันทึกไปทั่วเพื่อสร้างผลลัพธ์


9
อันที่จริงนี่ก็เหมือนกับเวอร์ชั่นบันทึกในคำตอบที่ได้รับการยอมรับ แต่ใช้ลอการิทึมหลังจากแทนที่จะเป็นมาก่อน (มันใช้คำใบ้อย่างชัดเจนยิ่งขึ้น)
hugomg

14

ป้อนคำอธิบายรูปภาพที่นี่

ขออภัยฉันไม่ทราบวิธีการใช้งาน LaTeX syntax ใน stackoverflow ..


1
นี่เป็นคำอธิบายที่ดีมาก! ฉันสามารถทำตามนี้จนถึงขั้นตอนที่ 7 แต่จากนั้นฉันไม่สามารถถอดรหัส mathemagic ที่เกิดขึ้นระหว่างขั้นตอนที่ 7 และขั้นตอนที่ 8 ... :-(
Z3d4s

3
@ Z3d4s การโต้แย้งในขั้นตอนที่ 7 นั้นโดยทั่วไปแล้วคำแรกบนด้านขวามือเป็นคำศัพท์ที่โดดเด่นและ log (n!) สามารถประมาณได้โดย n log (n) หรือว่าเป็นคำสั่ง n log (n) ซึ่งแสดงออกโดยสัญกรณ์ O ขนาดใหญ่ O (n * log (n))
สุ่ม 9

1
@ Z3d4s ขั้นตอนที่การแปลง 7-8 บอกว่า n logn == log (n ^ n) และสำหรับการแสดงขอบเขตที่นี่คุณสามารถพูดได้ว่าเทอมแรกมักจะยิ่งใหญ่กว่าเทอมที่สองคุณสามารถตรวจสอบค่าที่ใหญ่กว่าและ สำหรับการแสดงความซับซ้อนที่ยิ่งใหญ่เรามักจะนำสิ่งที่เหนือกว่ามาครอบครอง ดังนั้น n logn จะช่วยให้เกิดเวลาใหญ่
ชีฟปรากาช


7

สำหรับขอบเขตล่าง

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)

รวมขอบเขตทั้งสอง:

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

โดยการเลือกค่าคงที่ขอบเขตล่างที่มากกว่า (1/2) เราสามารถชดเชย -1 ภายในวงเล็บ

ดังนั้น lg (n!) = Theta (n lg n)


2
การสืบทอดเพิ่มเติมนี้เป็นสิ่งจำเป็นเพราะ "some"> = n / 2 * lg (n / 2) ไม่เท่ากับ omega (n lg n) ซึ่งถูกกล่าวถึงในความคิดเห็นก่อนหน้านี้
Vivek Anand Sampath

สิ่งนี้ควรอ่าน "ค่าคงที่ที่เล็กกว่า (1/2)" เนื่องจากเราพยายามหาขอบเขตล่าง ค่าคงที่ใด ๆ c น้อยกว่า (1/2) ในที่สุดจะทำให้ c n logn <= (1/2) n * logn- (1/2) n สำหรับ n ที่มากพอ
แมทธิว

3

ช่วยเหลือคุณต่อไปโดยที่ Mick Sharpe ทิ้งคุณไว้:

การเปลี่ยนเป็นเรื่องง่ายมาก: ดูhttp://en.wikipedia.org/wiki/Logarithm -> ทฤษฎีกลุ่ม

log (n!) = log (n * (n-1) * (n-2) * ... * 2 * 1) = log (n) + log (n-1) + ... + log (2 ) + บันทึก (1)

คิดว่า n เป็นเรื่องใหญ่อย่างไม่สิ้นสุด อนันต์ลบคืออะไร หรือลบสอง? เป็นต้น

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

แล้วคิดถึงinfเป็น n


2

ขอบคุณผมพบคำตอบของคุณน่าเชื่อ แต่ในกรณีของฉันฉันต้องใช้Θคุณสมบัติ:

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

เพื่อตรวจสอบปัญหาที่ฉันพบเว็บนี้ที่คุณมีกระบวนการทั้งหมดอธิบาย: http://www.mcs.sdsmt.edu/ecorwin/cs372/handouts/theta_n_factorial.htm


1

สิ่งนี้อาจช่วย:

e ln (x) = x

และ

(l m ) n = l m * n

3
ที่จริงแล้วมันผิด: 1 ^ (m ^ n)! = 1 ^ (m n) จะต้องเป็น (1 ^ m) ^ n = 1 ^ (m ^ n)
Pindatjuh

ผิดพลาดฉันหมายถึง L แทน 1 ในความคิดเห็นข้างต้น
Pindatjuh

เขาไม่ได้เขียน 1 ^ (m ^ n) เขาเขียน (l ^ m) ^ n
CodyBugstein

1
@CodyBugstein: มีการแก้ไขที่ทำเพื่อแก้ไขปัญหาคือคุณแสดงความคิดเห็นปีต่อมาเมื่อเกิดข้อผิดพลาดที่ถูกซ่อนอยู่ในประวัติศาสตร์
เบนยต์

0

http://en.wikipedia.org/wiki/Stirling%27s_approximation การ ประมาณค่าสเตอร์ลิงอาจช่วยคุณได้ มันมีประโยชน์มากในการจัดการกับปัญหาเกี่ยวกับแฟกทอเรียลที่เกี่ยวข้องกับคำสั่ง 10 ^ 10 ขึ้นไปจำนวนมาก

ป้อนคำอธิบายรูปภาพที่นี่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.