Trang wikipedia về thuật toán nhân đã đề cập đến một điều thú vị của Donald Knuth . Về cơ bản, nó liên quan đến việc kết hợp phép nhân biến đổi Fourier với bảng nhân các phép nhân có kích thước logarit. Nó chạy trong thời gian tuyến tính.
Bài viết này hoạt động như thuật toán này bằng cách nào đó không được tính là thuật toán nhân "thật". Quan trọng hơn, nó được coi là một câu hỏi mở cho dù nhân có thể được thực hiện trong O(n lg n)
thời gian thậm chí !
Những chi tiết nào của thuật toán này không đủ điều kiện để tính là thuật toán nhân "thật"?
Tôi đoán là:
- Việc tính toán trước bảng mất nhiều hơn thời gian tuyến tính. Mặt khác, nó vẫn có thể được thực hiện
n lg n
kịp thời nên dường như vẫn còn ấn tượng. - Truy cập ngẫu nhiên bằng cách nào đó không được phép. Nhưng tại sao các thuật toán khác có thể sử dụng những thứ như bảng băm và con trỏ?
- Nó bằng cách nào đó sai quy mô khi bạn tăng kích thước từ của máy, như nếu bạn có một máy 256 bit thực hiện phép nhân 256 bit trong một lệnh thì sẽ không có thuật toán nào cho đến khi bạn có nhiều hơn 2 ^ 256 phần tử. Mặt khác, chúng tôi bận tâm với yếu tố nghịch đảo-ackermann trong tìm kiếm kết hợp.
- "Có thuật toán nhân thời gian tuyến tính không?" câu hỏi là bí mật về một số máy yếu hơn, nhưng điều này chỉ được gợi ý.