อัลกอริธึมที่เร็วที่สุดสำหรับการคูณตัวเลขสองหลักคืออะไร


21

ฉันต้องการทราบว่าอัลกอริทึมใดที่เร็วที่สุดสำหรับการคูณตัวเลขสองหลัก n? ความซับซ้อนของพื้นที่สามารถผ่อนคลายได้ที่นี่!


1
คุณสนใจคำถามเชิงทฤษฎีหรือคำถามเชิงปฏิบัติหรือไม่?
— Yuval Filmus

ทั้งสอง แต่มีแนวโน้มที่จะนำไปใช้ได้จริงมากขึ้น!
— Andy

1
สำหรับคำถามที่ปฏิบัติได้ฉันขอแนะนำให้ใช้ GMP หากคุณสงสัยว่าพวกเขาใช้อะไรให้ดูเอกสารหรือซอร์สโค้ด
— Yuval Filmus

ไม่มีใครรู้. เรายังไม่พบมัน
— JeffE

คำตอบ:


22

ณ ตอนนี้อัลกอริทึมของFürerโดย Martin Fürerมีความซับซ้อนด้านเวลาของซึ่งใช้ฟูเรียร์แปลงตัวเลขที่ซับซ้อน อัลกอริธึมของเขานั้นมีพื้นฐานมาจากSchönhageและอัลกอริธึมของ Strassen ซึ่งมีความซับซ้อนของเวลา ofnเข้าสู่ระบบ⁡(n)2Θ(ล.โอก.* * * *(n))Θ(nเข้าสู่ระบบ⁡(n)เข้าสู่ระบบ⁡(เข้าสู่ระบบ⁡(n)))

อัลกอริธึมอื่น ๆ ที่เร็วกว่าการคูณระดับประถมศึกษาขั้นตอนวิธีคือการคูณ Karatsuba ซึ่งมีความซับซ้อนเวลาของ ≈และอัลกอริทึม Toom 3 ซึ่งมีความซับซ้อนเวลา ของO(nเข้าสู่ระบบ2⁡3)O(n1.585)Θ(n1.465)

โปรดทราบว่านี่เป็นอัลกอริทึมที่รวดเร็ว การค้นหาอัลกอริทึมที่เร็วที่สุดสำหรับการคูณเป็นปัญหาเปิดในสาขาวิทยาศาสตร์คอมพิวเตอร์

การอ้างอิง:

  1. อัลกอริทึมของFürer
  2. FFT คูณจำนวนมากขึ้นอยู่กับ
  3. การแปลงฟูริเยร์อย่างรวดเร็ว
  4. Toom – Cook การคูณ
  5. อัลกอริทึมSchönhage – Strassen
  6. อัลกอริทึม Karatsuba

สังเกตกระดาษล่าสุดโดยD. Harvey และ J. van der Hoeven (มีนาคม 2019)อธิบายอัลกอริทึมที่มีความซับซ้อนO(nLN⁡n)
— hardmath

9

โปรดทราบว่าอัลกอริทึม FFT ที่ แสดงโดย aviเพิ่มค่าคงที่ที่มีขนาดใหญ่ทำให้ไม่สามารถใช้ตัวเลขน้อยกว่าพันบิตได้

นอกเหนือจากรายการนั้นยังมีอัลกอริทึมที่น่าสนใจอื่น ๆ และคำถามแบบเปิด:

  • การคูณเวลาแบบเชิงเส้นในรูปแบบ RAM (พร้อม precomputation)
  • O(n2เข้าสู่ระบบ⁡n)1O(n2)O(เข้าสู่ระบบ⁡n)
  • ระบบเลขสารตกค้างและการแทนตัวเลขอื่น ๆ การคูณเป็นเวลาเกือบเป็นเส้นตรง ข้อเสียคือการคูณเป็นแบบแยกส่วนและ {การตรวจจับล้น, การเปรียบเทียบ, การเปรียบเทียบขนาด} ทั้งหมดนั้นยากหรือเกือบเท่าการแปลงตัวเลขกลับไปเป็นเลขฐานสองหรือการแทนแบบเดียวกันและทำการเปรียบเทียบแบบดั้งเดิม การแปลงนี้อย่างน้อยเลวร้ายเท่ากับการคูณแบบดั้งเดิม (ในขณะนี้ AFAIK)
    • ตัวแทนอื่น ๆ :
      • 16×32=2เข้าสู่ระบบ2⁡16+เข้าสู่ระบบ2⁡32=24+5=29
        • ข้อเสียคือการแปลงไปและกลับจากการเป็นตัวแทนลอการิทึมอาจจะยากเท่ากับการคูณหรือยากกว่าการเป็นตัวแทนอาจเป็นเศษส่วน / ไม่มีเหตุผล / โดยประมาณ ฯลฯ การดำเนินการอื่น ๆ (เพิ่มเติม?) มีแนวโน้มที่ยากขึ้น
      • 36×48=32⋅51×22⋅31⋅41=22⋅32⋅41⋅51
      • ข้อเสียคือต้องมีปัจจัยหรือตัวประกอบเป็นปัญหาที่ยากกว่าการคูณ การดำเนินการอื่น ๆ เช่นการเพิ่มนั้นยากมาก

1
ฉันเชื่อว่าวิธีการอิงทฤษฎีบทส่วนที่เหลือ / เศษเหลือจากจีนสามารถนำไปสู่การเร่งความเร็วได้มากกว่าการคูณแบบเดิมแม้จะมีการแปลงกลับ ณ จุดนี้อยู่ในบทที่ 4 ของ TAOCP อย่างน้อยก็เป็นเชิงอรรถ (มันยังไม่เข้าใกล้วิธีที่ใช้ FFT แต่เป็นบันทึกประวัติศาสตร์ที่น่าสนใจ)
— Steven Stadnicki

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