La pagina di Wikipedia sugli algoritmi di moltiplicazione menziona un interessante di Donald Knuth . Fondamentalmente, comporta la combinazione della moltiplicazione della trasformata di Fourier con una tabella precompilata di moltiplicazioni di dimensioni logaritmiche. Funziona in tempo lineare.
L'articolo si comporta come questo algoritmo in qualche modo non conta come un algoritmo di moltiplicazione "vero". Più significativamente, è considerata una domanda aperta se la moltiplicazione può essere fatta anche in O(n lg n)
tempo!
Quali dettagli di questo algoritmo lo escludono dal conteggio come un "vero" algoritmo di moltiplicazione?
Le mie ipotesi sono:
- Il pre-calcolo della tabella richiede più del tempo lineare. D'altra parte, può ancora essere fatto
n lg n
tempo, quindi sembrerebbe comunque impressionante. - L'accesso casuale non è in qualche modo consentito. Ma allora perché altri algoritmi possono usare cose come tabelle hash e puntatori?
- In qualche modo si ridimensiona quando si aumenta la dimensione della parola di una macchina, come se si dispone di una macchina a 256 bit che esegue moltiplicazioni a 256 bit in una singola istruzione, non ha senso questo algoritmo fino a quando non si hanno più di 2 ^ 256 elementi. D'altra parte, ci preoccupiamo del fattore inverso-ackermann in union-find.
- "Esiste un algoritmo di moltiplicazione del tempo lineare?" la domanda è segretamente in termini di qualche macchina più debole, ma questo viene solo accennato.