ความซับซ้อนของเวลาของอัลกอริทึม: มันเป็นสิ่งสำคัญที่จะระบุฐานของลอการิทึมหรือไม่?


19

เนื่องจากมีเพียงค่าคงที่ระหว่างฐานของลอการิทึมมันไม่ใช่แค่การเขียนเมื่อเทียบกับหรืออะไรก็ตาม ฐานอาจจะเป็นอย่างไร(n)=Ω(เข้าสู่ระบบn)Ω(เข้าสู่ระบบ2n)


คำตอบ:


63

มันขึ้นอยู่กับลอการิทึม ถ้ามันเป็นเพียงแค่ปัจจัยก็ไม่ได้สร้างความแตกต่างเพราะ big-O หรืออนุญาตให้คุณคูณด้วยค่าคงที่ใด ๆθ

หากคุณใช้ฐานนั้นสำคัญ ในฐานที่ 2 คุณจะมีเพียงในฐาน 10 มันเกี่ยวกับ0.3010)O(2เข้าสู่ระบบn)O(n)O(n0.3010)


5
ฉันเดาว่านี่จะเกิดขึ้นกับบางอย่างเช่น n ฉันไม่เห็นเหตุผลใด ๆ ในการแสดงตัวเลขเป็น2ล็อกbnแทนที่จะเป็นn-to-the-it-is (ยกเว้นอาจเป็นขั้นตอนกลางของการคำนวณ) 2เข้าสู่ระบบn2เข้าสู่ระบบnn
David Richerby

7
+1 สำหรับ "ปัจจัยคงที่มีความสำคัญในเลขชี้กำลัง"
โทรจัน

50

เพราะสัญกรณ์ asymptotic เป็นลบเลือนของปัจจัยคงที่และสองลอการิทึมแตกต่างกันโดยปัจจัยคงที่ฐานทำให้ไม่แตกต่าง: เข้าสู่ระบบan=Θ(เข้าสู่ระบบn)สำหรับทุก, B > 1 ดังนั้นไม่จำเป็นต้องระบุฐานของลอการิทึมเมื่อใช้สัญกรณ์ asymptotica,>1


13
ฉันชอบดูแทน==
Nayuki

16
ฉันเกรงว่าสัญกรณ์มาตรฐานจะใช้ . =
Yuval Filmus

4
@YuvalFilmus สัญกรณ์มาตรฐานนั้นทำให้เข้าใจผิดแตกต่างจากมาตรฐานอย่างสิ้นเชิงในทุก ๆ ที่และทำให้ความซับซ้อนของอัลกอริทึมนั้นดูต่างไปจากสิ่งที่ค่อนข้างคล้ายกับมัน "นี่เป็นสัญกรณ์มาตรฐาน" ไม่ควรเป็นเหตุผลในการสนับสนุนทางออกที่ไม่ดีไปกว่าสิ่งที่ดีกว่าและชัดเจนกว่าในทำนองเดียวกัน (ความหมายของสัญลักษณ์มักจะชัดเจนจากบริบทแล้ว)
wizzwizz4

7
@ wizzwizz4 การปฏิบัติทั่วไปเป็นเหตุผลที่ยอดเยี่ยม มันส่งเสริมการสื่อสารที่มีประสิทธิภาพ นั่นคือเหตุผลที่พวกเราทุกคนอดทนกับการสะกดคำในภาษาอังกฤษ
Yuval Filmus

3
บางครั้งก็มีสิ่งที่มากเกินไปจะมีชัดเจนกว่าเข้าสู่ระบบ n = Θ ( บันทึก n ) nเข้าสู่ระบบanΘ(nเข้าสู่ระบบn)เข้าสู่ระบบan=Θ(เข้าสู่ระบบn)
JiK

15

ในฐานะที่เป็นเข้าสู่ระบบxY=1เข้าสู่ระบบYxและเข้าสู่ระบบxY=เข้าสู่ระบบZYเข้าสู่ระบบZxเพื่อ เข้าสู่ระบบanเข้าสู่ระบบn=เข้าสู่ระบบnเข้าสู่ระบบna=เข้าสู่ระบบa ในฐานะที่เข้าสู่ระบบaเป็นค่าคงที่บวก (สำหรับทุก,B>1) เพื่อเข้าสู่ระบบn=Θ(บันทึกn)a,>1เข้าสู่ระบบan=Θ(เข้าสู่ระบบn)


8

ในกรณีส่วนใหญ่การวางฐานของลอการิทึมนั้นปลอดภัยเนื่องจากเป็นคำตอบอื่น ๆ ที่ชี้ให้เห็นสูตรการเปลี่ยนแปลงพื้นฐานสำหรับลอการิทึมหมายความว่าลอการิทึมทั้งหมดเป็นค่าคงที่ทวีคูณซึ่งกันและกัน

มีบางกรณีที่สิ่งนี้ไม่ปลอดภัย ตัวอย่างเช่น @ gnasher729 ได้ชี้ให้เห็นว่าหากคุณมีลอการิทึมในเลขชี้กำลังแล้วฐานลอการิทึมนั้นสำคัญมาก

ฉันต้องการชี้ให้เห็นอีกกรณีหนึ่งที่ฐานของลอการิทึมมีความสำคัญและเป็นกรณีที่ฐานของลอการิทึมขึ้นอยู่กับพารามิเตอร์ที่ระบุว่าเป็นอินพุตของปัญหาโดยตรง ยกตัวอย่างเช่นอัลกอริธึมการเรียงลำดับ radix ทำงานโดยการเขียนตัวเลขในฐานbบางส่วนการสลายการป้อนหมายเลขลงในหลักฐานbจากนั้นใช้การเรียงลำดับการนับเพื่อเรียงลำดับตัวเลขเหล่านั้นทีละหนึ่งหลัก งานที่ทำต่อรอบแล้วΘ(n+b)และมีประมาณlogbUรอบ (ที่Uเป็นจำนวนเต็มอินพุตสูงสุด) เพื่อให้รันไทม์รวมเป็นO((n+b)logbU) ) สำหรับจำนวนเต็มคงที่ใด ๆbจะทำให้O(nlogU)ง่ายขึ้น อย่างไรก็ตามจะเกิดอะไรขึ้นถ้าbไม่คงที่ เทคนิคฉลาดคือการเลือกb=nซึ่งในกรณีที่ช่วยลดความยุ่งยากในการรันไทม์O(n+lognU) ) ตั้งแต่lognU =logUlogn , การแสดงออกโดยรวมลดความซับซ้อนของO(nlogUlogn) ) ขอให้สังเกตว่าในกรณีนี้ฐานของลอการิทึมนั้นสำคัญมากเพราะมันไม่คงที่เมื่อเทียบกับขนาดอินพุต มีอัลกอริธึมอื่น ๆ ที่มี runtimes ที่คล้ายคลึงกัน (การวิเคราะห์แบบเก่าของชุด disjoint-Forest ได้จบลงด้วยคำของlogm/2+2อื่นเช่น) ซึ่งในกรณีที่การทิ้งฐานบันทึกจะรบกวนการวิเคราะห์รันไทม์

อีกกรณีหนึ่งที่เรื่องฐานการบันทึกเป็นเรื่องหนึ่งซึ่งมีพารามิเตอร์ที่ปรับได้จากภายนอกบางส่วนสำหรับอัลกอริทึมที่ควบคุมฐานลอการิทึม ตัวอย่างที่ดีของที่นี่คือ B-ต้นไม้ซึ่งจะต้องมีบางภายนอกพารามิเตอร์ขความสูงของต้นไม้ B ของลำดับคือΘ(เข้าสู่ระบบn)โดยที่ฐานของลอการิทึมมีความสำคัญในนั้นไม่คงที่

เพื่อสรุปในกรณีที่คุณมีลอการิทึมที่มีฐานคงที่คุณสามารถโดยปกติ (ขึ้นอยู่กับข้อยกเว้นเช่นสิ่งที่ @ gnasher729 ชี้ไปที่) วางฐานของลอการิทึม แต่เมื่อฐานของลอการิทึมขึ้นอยู่กับพารามิเตอร์บางตัวของอัลกอริทึมก็มักจะไม่ปลอดภัยที่จะทำเช่นนั้น

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