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


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เข้าสู่ระบบ23)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(nLNn)
hardmath

9

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

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

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

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

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