Сторінка вікіпедії в алгоритмах множення згадує цікаву Дональд Кнут . В основному, це передбачає поєднання множення множинних перетворень на фур'є з попередньо обчисленою таблицею множин логарифмічного розміру. Він працює в лінійний час.
Стаття діє так, що цей алгоритм якось не вважається "справжнім" алгоритмом множення. Більш суттєво, що це вважається відкритим питанням, чи можна множити за рівний O(n lg n)
час!
Які деталі цього алгоритму позбавляють його від врахування як "справжнього" алгоритму множення?
Мої здогадки:
- Попереднє обчислення таблиці займає більше, ніж лінійного часу. З іншого боку, це все ще можна зробити
n lg n
вчасно, так що все-таки здавалося б вражаючим. - Випадковий доступ якось заборонено. Але тоді чому інші алгоритми можуть використовувати такі речі, як хеш-таблиці та покажчики?
- Колись ви збільшуєте розмір слова машини, це як-небудь помиляється, як, наприклад, якщо у вас є 256-бітна машина, яка робить 256-бітне множення в одній інструкції, тоді в цьому алгоритмі немає сенсу, поки у вас більше 2 ^ 256 елементів. З іншого боку, ми турбуємось із зворотним фактором Ackermann у пошуку об'єднання.
- "Чи існує лінійний алгоритм множення часу?" питання таємно стосується якоїсь слабшої машини, але це лише натякає на це.