Perché l'algoritmo di moltiplicazione del tempo lineare di Knuth non "conta"?


13

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 fatton 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.

Risposte:


16

O(logn)nO(nlognloglogn) l'algoritmo di Fürer è più veloce.

CCΩ(nlogn)Ω(nlogn) è solo una congettura).

Per una discussione sul modello "corretto" per la moltiplicazione pratica di numeri interi di grandi dimensioni, consultare il recente documento di Fürer . La sua conclusione è a favore dell'algoritmo "pratico" di Schönhage-Strassen (ce ne sono due, e l'altro ha una migliore complessità, ma ha prestazioni peggiori nella pratica; Fürer affronta questo problema nel documento).


2
Grazie per il chiarimento. Non ho una copia di TAOCP, quindi tutto quello che dovevo fare era quello che era nell'articolo wiki (vedo che l'hai già modificato per risolvere il problema).
Craig Gidney,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.