เมื่อพูดฉันจะพูดได้อย่างไรว่าลำดับความซับซ้อนของเวลาของอัลกอริทึมคือ O (N log N)


22

คำใดที่ฉันสามารถใช้เพื่ออธิบายบางสิ่งบางอย่างที่มีความซับซ้อน O (N log N)

ตัวอย่างเช่น:

  • O (1): คงที่

  • O (บันทึก N): ลอการิทึม

  • O (N): เป็นเส้นตรง

  • O (N log N): ??????

  • O (N 2 ): กำลังสอง

  • O (N 3 ): ลูกบาศก์


5
ฉันมักจะที่นี่คำกว้าง "กึ่งเชิงเส้น" หมายถึงการที่O(n · f(n)) f(n) << nแต่การจับคู่นี้ยังมีสิ่งที่ชอบO(n · log log n)และO(n α(n))ตำแหน่งα(n)ของฟังก์ชัน Ackermann คืออะไร
Bakuriu


34
"โอ้ enn log enn" อาจดีพอ
user253751

คำตอบ:


60

"N log N" นั้นดีพอ ๆ กับที่คุณจะได้รับและควรจะเข้าใจโปรแกรมเมอร์มืออาชีพเป็นอย่างดี คุณไม่สามารถคาดหวังได้ว่าจะมีคำเดียวเพื่ออธิบายความซับซ้อนทุกระดับที่มีอยู่


6
“ ไม่สามารถคาดหวังว่าจะมีคำเดียวเพื่ออธิบายความซับซ้อนทุกระดับ” - ไม่แน่นอน แต่𝓞 ( n ⋅ log n ) นั้นเป็นคลาสที่สำคัญที่สมควรได้รับชื่อของตัวเอง IMO; และดังที่สตีฟเจสซอพกล่าวไว้ว่าเป็นเชิงเส้นตรงแล้ว
leftaroundabout

@leftaroundabout เป็นเรื่องธรรมดาพอที่คุณจะเถียงว่าสมควรได้รับชื่อ แต่ "n log n" สั้นพอที่จะออกเสียง (มีเพียงสามพยางค์) ที่ทำงานได้ดีเหมือนชื่อ สำหรับการเปรียบเทียบ "ลอการิทึม" เป็นสี่พยางค์ เป็นเรื่องที่น่าสนใจมากขึ้นเมื่อคุณใช้อัลกอริธึมภายนอกซึ่งอัลกอริทึมส่วนใหญ่ "n log n" มีความซับซ้อน $ N log_B (N / B) $ ซึ่งแน่นอนว่าจะเป็นระดับความซับซ้อนที่ควรค่าแก่ชื่อที่สั้นกว่า
kasperd

10
ในฐานะนักศึกษาปริญญาโทด้านวิทยาศาสตร์คอมพิวเตอร์ฉันเคยได้ยิน "enn log enn" ตลอดการเรียนในวิทยาลัย ฉันไม่เคยได้ยินคำว่า "linearithmic" และจะไม่เข้าใจความหมายในตอนแรก
Kevin - Reinstate Monica

@Kevin: ลอการิทึมเป็นสี่พยางค์ แต่ "log-enn" เป็นเพียงสอง ในทำนองเดียวกัน O (N ^ 2) คือ "enn-squared" ไม่ใช่ "กำลังสอง" ฉันคิดว่า "ลูกบาศก์" มีหน่วยเสียงน้อยกว่า "enn-cubed" แต่ฉันคิดว่าคำหลังยังคงเป็นเรื่องธรรมดา
supercat

51

linearithmicคำศัพท์แสงมีความหมายตรงนี้

ฉันไม่เชื่อว่าโปรแกรมเมอร์ทุกคนเข้าใจในระดับสากลดังนั้นหากคุณไม่ระวังก็จะปิดบังมากกว่าที่แจ้งไว้ โดยส่วนตัวแล้วฉันไม่ได้ใช้งานตามปกติและถ้าฉันทำแล้วฉันอาจจะกำหนดมันในการใช้งานครั้งแรกเช่น "บทความนี้พิจารณาเป็นO(N log N)ขั้นตอนวิธีเชิงเส้นตรง


11
ไม่เคยรู้มาก่อนเลยว่ามีอยู่จริง!
เดวิดพูดว่า Reinstate Monica

12

บางครั้งเรียกว่า "loglinear" แม้ว่าคำนั้นหมายถึงบางสิ่งที่แตกต่าง ฉันจะใช้คำว่า "N log N" ตามคำแนะนำของ @ Philip


1
ความหมายอื่นของ log-linear คืออะไร? หากฉันต้องการชื่ออื่นที่ไม่ใช่ 'N log N' บันทึกเชิงเส้นคือคำที่ฉันใช้
Jonathan Leffler

2
@JonathanLeffler: ฉันถือว่าen.wikipedia.org/wiki/Log-linear_analysisสะกดเป็นบางครั้งโดยไม่มีเครื่องหมายขีดคั่น แน่นอนว่าการกำหนดชื่อที่เหมาะสมคุณสามารถใช้คำเดียวกันกับคลาสที่ซับซ้อนได้อย่างมีความสุข
Steve Jessop

@SteveJessop: นั่นคือสิ่งที่เกิดขึ้นจากการค้นหาโดย Google ฉันไม่แน่ใจว่าฉันยินดีที่จะยอมรับคำสั่งผสมของ Google / Wikipedia อย่างเป็นทางการหรือไม่แม้ว่าฉันจะไม่มีข้อสงสัยใด ๆ ว่าการวิเคราะห์เชิงเส้นของล็อกนั้นเป็นไปตามที่อธิบายไว้
Jonathan Leffler

1
@JanathanLeffler: อาจหมายถึงสิ่งที่ฉันเรียกว่าพล็อต lin-log หรือ log-lin (หรือเพราะฉันขี้เกียจจริง ๆ แล้วฉันมักจะเรียกพล็อตการบันทึกเป็นความแตกต่างจาก log-log) เราอาจถามซึ่งหมายถึงคำตอบอื่นในใจ :-)
Steve Jessop

2

เนื่องจากปัจจัยlog nเติบโตช้าคำอธิบายเชิงคุณภาพของคำO(n log n)ว่า "เกือบเป็นเส้นตรง" คลาสO(n log n)อัลกอริทึมอาจเป็นที่รู้จักกันดีขึ้นอยู่กับผู้ชมของคุณตัวอย่างเช่นกรณีนี้คือการเรียงลำดับnรายการอย่างรวดเร็วโดยการเปรียบเทียบ

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