คลาสของฟังก์ชันที่อธิบายโดย O (n log n) คืออะไร?


40

ใน "บิ๊กโอ" สัญลักษณ์ทั่วไปมีชื่อสามัญ (แทนที่จะพูดว่า "โอ้ปัจจัยคงที่"):

O (1)คือ "คงที่"

O (บันทึก n)คือ "ลอการิทึม"

O (n)คือ "เชิงเส้น"

O (n ^ 2)คือ "กำลังสอง"

O (n * log n)คือ ???

มันเป็นแค่ "n log n" หรือมีชื่อพิเศษเหมือนด้านบนหรือไม่?


คำตอบ:


52

มันเรียกว่าlinearithmicเวลาและเป็นกรณีพิเศษของชั้นทั่วไปรู้จักกันมากขึ้นเป็นเชิงเส้นเสมือน ตามชื่ออาจแนะนำอัลกอริทึมที่อยู่ในคลาสนี้เกือบจะทำงานในเวลาเชิงเส้น ในความเป็นจริงพวกเขามีความซับซ้อนต่ำกว่าอัลกอริทึมที่ทำงานในกับk > 1O(nk)k>1


ความคิดเห็นไม่ได้มีไว้สำหรับการอภิปรายเพิ่มเติม การสนทนานี้ได้รับการย้ายไปแชท
Gilles 'SO- หยุดความชั่วร้าย'

17

linearithmic: adj.

ของอัลกอริทึมมีเวลาทำงานที่ O (N log N) ประกาศเกียรติคุณเป็นกระเป๋าหิ้วของ 'เชิงเส้น' และ 'ลอการิทึม' ในอัลกอริทึมใน Cโดย Robert Sedgewick (Addison-Wesley 1990, ISBN 0-201-51425-7)

http://catb.org/jargon/html/L/linearithmic.html


ทำไมฉันไม่แปลกใจเลยว่ามันมาจาก Sedge ... :)
TextGeek

11

ฉันเคยได้ยิน O (n log n) อธิบายว่า "log-linear" ซึ่งดูเหมือนว่าจะเหมาะสมกับฉัน


4
ที่กล่าวถึงการอ้างอิงหรือสองจะดี
กราฟิลส์

7

นี่นานเกินไปสำหรับความคิดเห็นดังนั้นฉันจึงเขียนคำตอบ ฉันไม่ได้เพิ่มสิ่งนี้ในคำตอบแรกของฉันเพราะมีผู้คนมากมายโหวตขึ้นคำตอบแรกของฉันแล้วและฉันไม่แน่ใจว่าพวกเขาเห็นด้วยกับคำตอบนี้เช่นกัน

  • ฉันไม่คิดว่าlinearithmicเป็นคำที่กำหนดขึ้นตามที่ระบุไว้ในความคิดเห็นต่อคำตอบที่ยอมรับ ฉันค้นหาบทความที่ค่อนข้างใหม่โดยใช้คำศัพท์นี้หลักสูตร CS และหนังสืออีกเล่มของ Sedgewick ที่ใช้คำนี้และพจนานุกรมออนไลน์จำนวนมาก
  • quasilinearระยะฉันพบในสองบทความ:

    ความพึงพอใจคือ Quasilinear เสร็จสมบูรณ์ในวารสาร NQL
    CP Schnorr
    ของสมาคมเครื่องจักรกล, ปีที่
    25 , ฉบับที่ 1, มกราคม 1978, pp 136-1,15

และในบทความที่อ้างถึงใน Wikipedia ที่เกี่ยวข้องกับบทความของ Schorr นี้ Schnorr แนะนำคลาส quasilinear (QL) ที่ซับซ้อนและ nondeterministic quasilinear (NQL)
ดูเหมือนว่า Quasilinear จะใช้ในทฤษฎีของสมการเชิงอนุพันธ์ย่อยเช่นกัน

โดยสรุปดูเหมือนว่าชาว Wikipedians หนึ่งคนหรือมากกว่าต้องการระบุชื่อสำหรับฟังก์ชั่นนี้ที่ไม่มีชื่อที่ยอมรับกันอย่างกว้างขวาง แต่ถึงตอนนี้สำหรับฉันแล้วดูเหมือนว่าไม่มีชื่อใดได้รับการยอมรับอย่างกว้างขวาง (นอกจากนั้นฉันคิดว่านี่เป็นวิธีการจัดการที่ Wikipedia ไม่ควรทำ) ฉันคิดว่าต้องระวังถ้าใช้ Wikipedia สำหรับคำถามคำศัพท์ และสำหรับฟังก์ชั่นนี้มันไม่ได้เป็นแหล่งที่เพียงพอ ผมคิดว่าเพียงชื่อเดียวที่ได้รับการยอมรับกันอย่างแพร่หลายสำหรับฟังก์ชั่นนี้เป็น n log n


1
ในขณะที่ความถูกต้องของlinearithmicและloglinearอาจจะเป็นที่ถกเถียงกันอยู่ผมเชื่อว่าquasi-linearเป็นคำที่มีชื่อเสียง ดูเหมือนว่าจะใช้กันอย่างแพร่หลายในงานวิจัย
Roukah

@Roukah ใช่ แต่มันไม่ได้หมายถึงสิ่งเดียวกัน quasilinear ทั่วไปมากขึ้น - ฉันไม่เห็นอะไรผิดปกติกับวิกิพีเดียโดยใช้ชื่อที่มีความโปร่งใสที่ดูเหมือนจะไม่มีทางเลือกที่ดีกว่าและถูกนำมาใช้ในแหล่งที่มีชื่อเสียงพอสมควรแม้ว่าจะมีการแพร่กระจายไม่มาก ในความเป็นจริงฉันจะบอกว่าความจริงที่ว่ามันไม่ได้แพร่กระจายแม้จะเป็นคลาสที่ซับซ้อนอย่างมากก็แนะนำว่ามันเป็นเวลาที่ผู้คนเริ่มใช้มันมากขึ้น!
leftaroundabout

+1 "ชื่อที่ยอมรับกันอย่างแพร่หลายสำหรับฟังก์ชั่นนี้คือ n log n" - คำตอบอื่น ๆ ทั้งหมดคือความบันเทิงและการแก้ไข แต่ฉันคิดว่าคุณอาจจะถูก ฉันได้ฝึกพูดคำว่า "linearithmic" เป็นเวลาสองสามวันแล้วและมันก็ยังไม่หลุดออกมา "En log en" นั้นง่ายต่อการพูดจดจำและเข้าใจได้ง่ายโดยทุกคนที่คุ้นเคยกับ Big O. ฉันจะคิดถึงมันนิดหน่อย แต่ฉันอาจต้องยอมรับคำตอบนี้
GlenPeterson
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.