เหตุใดอัลกอริธึมการคูณเชิงเส้นเชิงเวลาของ Knuth จึงไม่“ นับ”


13

หน้าวิกิพีเดียในขั้นตอนวิธีการคูณกล่าวหนึ่งที่น่าสนใจโดยโดนัลด์ Knuth โดยพื้นฐานแล้วมันเกี่ยวข้องกับการรวมการคูณการแปลงฟูริเยร์กับตารางที่คำนวณล่วงหน้าของการคูณขนาดลอการิทึม มันทำงานในเวลาเชิงเส้น

บทความทำหน้าที่เหมือนอัลกอริทึมนี้ แต่อย่างใดไม่นับเป็นอัลกอริทึมการคูณ "จริง" ที่สำคัญกว่านั้นก็ถือว่าเป็นคำถามเปิดว่าการคูณสามารถทำได้ในO(n lg n)เวลา!

รายละเอียดของอัลกอริทึมนี้ตัดสิทธิ์จากการนับเป็นอัลกอริทึมการคูณ "จริง" หรือไม่

การเดาของฉันคือ:

  • การคำนวณล่วงหน้าของตารางใช้เวลามากกว่าเชิงเส้น ในทางกลับกันก็สามารถทำได้ในn lg nเวลาเพื่อที่จะยังคงน่าประทับใจ
  • การเข้าถึงแบบสุ่มไม่ได้รับอนุญาต แต่ทำไมอัลกอริธึมอื่น ๆ สามารถใช้สิ่งต่าง ๆ เช่นตารางแฮชและพอยน์เตอร์ได้
  • มันจะปรับขนาดผิดเมื่อคุณเพิ่มขนาดคำของเครื่องเช่นถ้าคุณมีเครื่อง 256 บิตที่ทำหน้าที่ 256 บิตในการเรียนการสอนเพียงครั้งเดียวดังนั้นจึงไม่มีทางชี้ไปที่อัลกอริทึมนี้จนกว่าคุณจะมีองค์ประกอบมากกว่า 2 ^ 256 ในทางกลับกันเรากังวลกับปัจจัยผกผัน - ackermann ในการค้นหาสหภาพ
  • "มีอัลกอริทึมการคูณเวลาเชิงเส้นหรือไม่" คำถามนั้นเป็นความลับในแง่ของเครื่องจักรที่อ่อนแอกว่า แต่มีเพียงนัยที่

คำตอบ:


16

ขณะที่ขั้นตอนวิธีการที่คุณพูดถึงปรากฎใน TAOCP นูมันไม่แน่นอนเนื่องจากนูและเป็นที่รู้จักกันอย่างแพร่หลายมากขึ้นเป็นขั้นตอนวิธี schonhage-strassen ; Knuth ยังกำหนดอัลกอริทึมนี้ให้พวกเขาในข้อความ อัลกอริทึมนี้ทำงานในเวลาเชิงเส้นในเครื่อง RAM ที่เรียกว่าซึ่งตัวแปรได้รับอนุญาตให้ถือจำนวนเต็มขนาดโดยที่คือขนาดของอินพุต ความซับซ้อนของบิตคือและสำหรับรุ่นนี้อัลกอริทึมของFürerนั้นเร็วกว่าO(logn)nO(nlognloglogn)

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

สำหรับการอภิปรายของ "ถูกต้อง" แบบจำลองสำหรับการคูณปฏิบัติของจำนวนเต็มขนาดใหญ่ให้ตรวจสอบ Furer ของกระดาษที่ผ่านมา ข้อสรุปของเขาเป็นที่โปรดปรานของอัลกอริทึม "ปฏิบัติ" Schönhage - Strassen (มีสองของพวกเขาและอีกคนหนึ่งมีความซับซ้อนบิตที่ดีกว่า แต่มีประสิทธิภาพที่แย่ลงในทางปฏิบัติ;


2
ขอขอบคุณสำหรับการชี้แจง. ฉันไม่มีสำเนาของ TAOCP ดังนั้นสิ่งที่ฉันต้องทำก็คือสิ่งที่อยู่ในบทความ wiki (ฉันเห็นว่าคุณได้แก้ไขไปแล้วเพื่อแก้ไขปัญหา)
Craig Gidney
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.