La página de Wikipedia sobre algoritmos de multiplicación menciona una interesante de Donald Knuth . Básicamente, implica combinar la multiplicación de transformada de Fourier con una tabla precalculada de multiplicaciones de tamaño logarítmico. Se ejecuta en tiempo lineal.
El artículo actúa como si este algoritmo de alguna manera no cuenta como un algoritmo de multiplicación "verdadero". Más significativamente, ¡se considera una pregunta abierta si la multiplicación se puede hacer en un O(n lg n)
tiempo parejo !
¿Qué detalles de este algoritmo lo descalifican de contar como un algoritmo de multiplicación "verdadero"?
Mis conjeturas son:
- El cálculo previo de la tabla lleva más tiempo lineal. Por otro lado, todavía se puede hacer a
n lg n
tiempo, por lo que aún parece impresionante. - El acceso aleatorio de alguna manera no está permitido. Pero entonces, ¿por qué otros algoritmos pueden usar cosas como tablas hash y punteros?
- De alguna manera, se escala mal a medida que aumenta el tamaño de palabra de una máquina, como si tuviera una máquina de 256 bits que realiza multiplicaciones de 256 bits en una sola instrucción, entonces no tiene sentido este algoritmo hasta que tenga más de 2 ^ 256 elementos. Por otro lado, nos molestamos con el factor inverso de Ackermann en union-find.
- El "¿hay un algoritmo de multiplicación de tiempo lineal?" La pregunta es secretamente en términos de alguna máquina más débil, pero esto solo se insinúa.