คำใดที่ฉันสามารถใช้เพื่ออธิบายบางสิ่งบางอย่างที่มีความซับซ้อน O (N log N)
ตัวอย่างเช่น:
O (1): คงที่
O (บันทึก N): ลอการิทึม
O (N): เป็นเส้นตรง
O (N log N): ??????
O (N 2 ): กำลังสอง
O (N 3 ): ลูกบาศก์
คำใดที่ฉันสามารถใช้เพื่ออธิบายบางสิ่งบางอย่างที่มีความซับซ้อน O (N log N)
ตัวอย่างเช่น:
O (1): คงที่
O (บันทึก N): ลอการิทึม
O (N): เป็นเส้นตรง
O (N log N): ??????
O (N 2 ): กำลังสอง
O (N 3 ): ลูกบาศก์
คำตอบ:
"N log N" นั้นดีพอ ๆ กับที่คุณจะได้รับและควรจะเข้าใจโปรแกรมเมอร์มืออาชีพเป็นอย่างดี คุณไม่สามารถคาดหวังได้ว่าจะมีคำเดียวเพื่ออธิบายความซับซ้อนทุกระดับที่มีอยู่
linearithmicคำศัพท์แสงมีความหมายตรงนี้
ฉันไม่เชื่อว่าโปรแกรมเมอร์ทุกคนเข้าใจในระดับสากลดังนั้นหากคุณไม่ระวังก็จะปิดบังมากกว่าที่แจ้งไว้ โดยส่วนตัวแล้วฉันไม่ได้ใช้งานตามปกติและถ้าฉันทำแล้วฉันอาจจะกำหนดมันในการใช้งานครั้งแรกเช่น "บทความนี้พิจารณาเป็นO(N log N)
ขั้นตอนวิธีเชิงเส้นตรง
บางครั้งเรียกว่า "loglinear" แม้ว่าคำนั้นหมายถึงบางสิ่งที่แตกต่าง ฉันจะใช้คำว่า "N log N" ตามคำแนะนำของ @ Philip
เนื่องจากปัจจัยlog n
เติบโตช้าคำอธิบายเชิงคุณภาพของคำO(n log n)
ว่า "เกือบเป็นเส้นตรง" คลาสO(n log n)
อัลกอริทึมอาจเป็นที่รู้จักกันดีขึ้นอยู่กับผู้ชมของคุณตัวอย่างเช่นกรณีนี้คือการเรียงลำดับn
รายการอย่างรวดเร็วโดยการเปรียบเทียบ
O(n · f(n))
f(n) << n
แต่การจับคู่นี้ยังมีสิ่งที่ชอบO(n · log log n)
และO(n α(n))
ตำแหน่งα(n)
ของฟังก์ชัน Ackermann คืออะไร