Strona wikipedii na temat algorytmów mnożenia wspomina o interesującym autorstwa Donalda Knutha . Zasadniczo polega na połączeniu mnożenia transformacji Fouriera ze wstępnie obliczoną tabelą mnożenia wielkości logarytmicznych. Działa w czasie liniowym.
Artykuł działa tak, jakby ten algorytm jakoś nie liczy się jako „prawdziwy” algorytm mnożenia. Co ważniejsze, uważa się za otwarte pytanie, czy pomnożenie może być wykonane nawet w O(n lg n)
czasie!
Jakie szczegóły tego algorytmu dyskwalifikują go przed liczeniem jako „prawdziwego” algorytmu mnożenia?
Moje domysły to:
- Wstępne obliczenie tabeli zajmuje więcej niż czas liniowy. Z drugiej strony nadal można to zrobić na
n lg n
czas, aby nadal wydawało się imponujące. - Losowy dostęp jest jakoś niedozwolony. Ale dlaczego inne algorytmy mogą używać takich rzeczy jak tabele skrótów i wskaźniki?
- Jakoś skaluje się niepoprawnie, gdy zwiększasz rozmiar słowa maszyny, na przykład jeśli masz maszynę 256-bitową, która wykonuje 256-bitowe multiplikacje w pojedynczej instrukcji, to nie ma sensu dla tego algorytmu, dopóki nie będziesz mieć więcej niż 2 ^ 256 elementów. Z drugiej strony przeszkadza nam czynnik odwrotny-ackermann w znajdowaniu związków.
- „Czy istnieje algorytm liniowego mnożenia czasu?” pytanie jest potajemnie związane z jakąś słabszą maszyną, ale tylko o tym się mówi.