ค่าคงที่ที่ซ่อนอยู่ในความซับซ้อนของอัลกอริทึม


9

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

โปรดทราบว่าสำหรับอัลกอริธึมอื่น ๆ เช่นการจัดเรียงทั่วไปและการเพิ่มจำนวนเต็มอัลกอริธึมเป็นที่รู้จักกันดีกับความซับซ้อนเชิงซ้อนที่เหมาะสมที่สุดและปัจจัยคงที่เล็ก ๆ

มีการวิจัยอะไรบ้างในการแยกอัลกอริธึมเดิมออกจากอัลกอริธึมหลังจากมุมมองเชิงทฤษฎี

ฉันรู้ว่าค่าคงที่ซ่อนอยู่มักถูกละเว้นเพื่อซ่อนความแตกต่างระหว่างการคำนวณแบบต่าง ๆ อย่างไรก็ตามฉันมั่นใจว่าภายใต้โมเดลที่แตกต่างหลากหลายอัลกอริทึม Galactic เหล่านี้จะช้ากว่าอัลกอริธึมที่แย่กว่า asymptotically สำหรับอินพุตขนาดหนึ่งพันล้าน ความแตกต่างนั้นไม่ละเอียดในบางกรณี มันถูกทำอย่างเข้มงวด?

ตัวอย่างเช่นเราสามารถประดิษฐ์แบบจำลองการคำนวณที่ง่ายมากเช่นเครื่อง von Neumann ด้วย ISA ที่ง่ายมากจากนั้นใช้อัลกอริทึมและ จำกัด เวลาทำงานกับค่าคงที่ชัดเจน สิ่งนี้ทำมาเพื่ออัลกอริทึมที่หลากหลายหรือไม่?


1
อัลกอริธึมการคูณจำนวนเต็มอย่างรวดเร็วไม่ใช่ทางช้างเผือก พวกมันใช้กันทั่วไปในทางปฏิบัติ
Emil Jeřábek

2
@ EmilJeřábekอาจเป็น OP กำลังพูดถึงการพัฒนาล่าสุดของ David Harvey และ Joris van der Hoeven "การคูณจำนวนเต็มในเวลา " ซึ่งเป็นกาแลคซี (ดูรายการบล็อกของลิปตันนี้: rjlipton .wordpress.com / 2019/03/29 / … )O(nlogn)
Lamine

1
ในขณะที่ผู้เขียนเขียนเอง (และถูกกล่าวถึงในบล็อกของ Lipton) กระดาษเพื่อความเรียบง่ายไม่พยายามปรับค่าคงที่ให้เหมาะสม
Emil Jeřábek

@ EmilJeřábekเอกสารนั้นเป็นสิ่งที่ฉันกำลังพูดถึง กระดาษอธิบายการปรับปรุงที่สามารถทำได้ แต่เป็นที่น่าสงสัยอย่างยิ่งว่าอัลกอริทึมตามที่เคยจะเป็นการปรับปรุงการปฏิบัติมากกว่าปัจจุบัน O (n log log log n) อัลกอริทึมที่ใช้ในการปฏิบัติให้ log log n ขนาดเล็ก สำหรับอินพุตที่ใช้งานได้จริง
isaacg

4
@ EmilJeřábekโดยเฉพาะขั้นตอนวิธีการที่นำเสนอในคล้อยตามกระดาษที่ขั้นตอนวิธีการง่ายสำหรับกรณีฐานเมื่อใดก็ตามที่มีจำนวนน้อยกว่าบิตที่พวกเขากำลังใช้dการเพิ่มประสิทธิภาพที่อธิบายอาจช่วยให้พวกเขาใช้แทนได้ แต่บิตยังคงเกินจำนวนอนุภาคในเอกภพดังนั้นการปฏิบัติจริงจึงยังไม่เป็นปัญหา ดูส่วนที่ 5.4 ของบทความ 2d12d=1729d=92912
isaacg

คำตอบ:


2

หนึ่งในสถานที่นี้จะเดินเข้ามาในทางที่น่าสนใจสำหรับชั้นหนึ่งของขั้นตอนวิธีและปัญหา combinatorial อยู่ในcombinatorics วิเคราะห์ วิธีการหลักที่อธิบายนั้นคล้ายกับที่คุณแนะนำ: คุณเริ่มต้นด้วยการใช้อัลกอริทึมอย่างเป็นรูปธรรมและระบุการดำเนินการซ้ำ ๆ (โดยทั่วไปจะหนักที่สุด) ที่คุณจะใช้เพื่อเชื่อมโยงความซับซ้อนนับได้อย่างชัดเจน ขนาดในรูปแบบของหมายเลขที่ดำเนินการตามที่เลือกNCN

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

ส่วนผสมที่สำคัญที่สุดในวิธีการนี้คือการวิเคราะห์ฟังก์ชั่นการสร้างค่าเหล่านี้ บางครั้งคุณสามารถได้รับการประมาณเชิงซีมโทติคที่แม่นยำมากโดยใช้วิธีจากการวิเคราะห์ที่ซับซ้อน

ตัวอย่างง่ายๆที่ถือว่าในหนังสือเล่มนี้คือ quicksort นี่เป็นกรณีที่เลวร้ายที่สุดที่เป็นกำลังสอง แต่ในทางปฏิบัติมีประสิทธิภาพสูงกว่าอัลกอริทึมส่วนใหญ่ เมื่อทำการวิเคราะห์ที่แม่นยำของค่าใช้จ่าย quicksort ที่คาดหวังและคุณเปรียบเทียบกับการรวมกิจการคุณจะเห็นว่าคาดว่าจะดีกว่าหลังจากขนาดประมาณ 10 ถ้าฉันจำได้อย่างถูกต้อง เพื่อให้สามารถคำนวณสิ่งต่าง ๆ เช่นนี้คุณไม่สามารถมองข้ามค่าคงที่ที่ซ่อนอยู่ของหลักสูตรได้O(nlogn)

ในความเป็นจริงใน quicksort คุณเรียงลำดับรายการโดยการเรียงลำดับ sublists ซ้ำเพื่อให้คุณได้รับการปรับปรุงสำหรับทุกขนาดถ้าคุณใช้การผสานในรายการที่เล็กกว่าขนาด 10 หมายเหตุที่น่าสนใจในหนังสือกล่าวถึงในห้องสมุด Microsoft ที่เปิดแหล่งที่มา อัลกอริทึมการเรียงลำดับทั่วไปจะถูกนำมาใช้เป็น quicksort จนกว่าคุณจะมีขนาดเท่ากับ 10 หลังจากนั้นจะใช้การผสานรวม ในความคิดเห็นเกี่ยวกับโค้ดมีการกล่าวถึงว่าการทดสอบประสิทธิภาพพบว่าค่านี้เหมาะสมที่สุด

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