Thuật toán nhanh nhất để nhân hai số có n chữ số là gì?


21

Tôi muốn biết thuật toán nào là nhanh nhất để nhân hai số có n chữ số? Không gian phức tạp có thể được thư giãn ở đây!


1
Bạn có quan tâm đến câu hỏi lý thuyết hoặc trong câu hỏi thực tế?
Yuval Filmus

Cả hai, nhưng nghiêng về một trong thực tế!
Andy

1
Đối với câu hỏi thực tế, tôi khuyên bạn nên sử dụng GMP. Nếu bạn tò mò không biết họ sử dụng cái gì, hãy xem tài liệu hoặc mã nguồn.
Yuval Filmus

Không ai biết. Chúng tôi chưa tìm thấy nó.
JeffE

Câu trả lời:


22

Tính đến nay thuật toán Fürer của Martin Fürer có độ phức tạp thời điểm trong đó sử dụng biến đổi Fourier trên số phức. Thuật toán của ông thực sự là dựa trên thuật toán Schönhage và Strassen của trong đó có một độ phức tạp thời gian của Θ ( n log ( n ) log ( log ( n ) ) )nlog(n)2Θ(log(n))Θ(nlog(n)log(log(n)))

Các thuật toán khác mà là nhanh hơn so với trường lớp Nhân thuật toán là Karatsuba nhân trong đó có một độ phức tạp thời gian O ( n 1,585 ) và Toom 3 thuật toán trong đó có một độ phức tạp thời gian của Θ ( n 1,465 )O(nlog23)O(n1.585)Θ(n1.465)

Lưu ý rằng đây là những thuật toán nhanh. Tìm thuật toán nhanh nhất để nhân là một vấn đề mở trong Khoa học Máy tính.

Tài liệu tham khảo:

  1. Thuật toán của Fürer
  2. Nhân số dựa trên FFT của số lượng lớn
  3. Biến đổi Fourier nhanh
  4. Nhân toom ăn Cook nhân
  5. Thuật toán Schönhage trên mạng Strassen
  6. Thuật toán Karatsuba

Lưu ý bài báo gần đây của D. Harvey và J. van der Hoeven (tháng 3 năm 2019) mô tả một thuật toán có độ phức tạp . O(nlnn)
hardmath

9

Lưu ý rằng các thuật toán FFT được liệt kê bởi avi thêm một hằng số lớn, khiến chúng không thực tế đối với các số nhỏ hơn hàng nghìn + bit.

Ngoài danh sách đó, còn có một số thuật toán thú vị khác và các câu hỏi mở:

  • Phép nhân thời gian tuyến tính trên mô hình RAM (có tiền mã hóa)
  • O(n2logn)1O(n2)O(logn)
  • Hệ thống số dư và các đại diện khác của số; phép nhân gần như là thời gian tuyến tính. Nhược điểm là, phép nhân là mô-đun và {phát hiện tràn, so sánh, so sánh cường độ} đều khó hoặc gần như khó như chuyển đổi số trở lại biểu diễn nhị phân hoặc tương tự và thực hiện so sánh truyền thống; chuyển đổi này ít nhất là xấu như phép nhân truyền thống (tại thời điểm này, AFAIK).
    • Các đại diện khác:
      • 16×32=2log216+log232=24+5=29
        • Nhược điểm là chuyển đổi sang và từ biểu diễn logarit có thể khó như nhân hoặc khó hơn, biểu diễn cũng có thể là phân số / không hợp lý / gần đúng, v.v. Các thao tác khác (bổ sung?) Có thể khó khăn hơn.
      • 36×48=3251×223141=22324151
      • Nhược điểm là, đòi hỏi các yếu tố, hoặc nhân tố hóa, một vấn đề khó khăn hơn nhiều so với nhân. Các hoạt động khác như bổ sung có thể rất khó khăn.

1
Tôi tin rằng một cách tiếp cận dựa trên Định lý còn lại của Trung Quốc với các mô đun đúng có thể dẫn đến tăng tốc so với phép nhân truyền thống ngay cả khi chuyển đổi trở lại; tại một số điểm, đây là trong chương 4 của TAOCP, ít nhất là như một chú thích. (Nó vẫn không đến gần các phương pháp dựa trên FFT, nhưng đó là một ghi chú lịch sử thú vị)
Steven Stadnicki

@StevenStadnicki ồ, tôi cần xem xét điều đó sau đó; Bạn có biết sự phức tạp?
Realz Slaw
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.